2013-04-03 5 views
1

Mes hypothèses sont la fonction .each() est plus lente qu'une boucle for lorsqu'il s'agit d'un grand nombre d'éléments.Utilisation pour au lieu de .each()

Mon problème est avec la boucle for je suis incapable de manipuler les éléments que je suis en boucle à travers eux. Je peux le faire très bien avec .each(). Cela pourrait être une réponse simple.

Javascript:

var element = $('#element h3'); 
var length = element.length; 
var newHtml; 

for(i=0;i<length;i++){ 

    newHtml = element[i].html(); 

    ...test newHtml 
} 

Les pauses de code lorsque je tente de saisir l'.html() de l'élément. J'ai vu des articles qui expliquent que c'est la façon de faire une boucle sur des éléments avec une boucle for, mais saisir des informations et les manipuler n'a jamais été abordé.

Toute aide sera grandement appréciée!

+4

Est-ce que vous faites vraiment cela juste parce qu'il s'exécute plus vite? C'est une optimisation prématurée. Il suffit d'utiliser '.each', le goulot d'étranglement va être' .html() 'de toute façon, pas la boucle. –

+1

'element' est un nom trompeur; ça devrait être pluriel. – SLaks

+0

@SLaks est juste il shud être 'elements' –

Répondre

6

element[i] est un élément DOM brut, pas un objet jQuery. (Comme dans this.each())

Vous voulez element.eq(i), qui renverra un objet jQuery enveloppant l'élément ie.

+0

Ou' element [i] .innerHTML' qui soi-disant a de meilleures performances. –

+1

+1 pour le "th" en exposant. – MaxArt

+0

merci, c'est ce qui me manquait. – James

0

Si vous cherchez une solution plus optimisée pour gérer des quantités énormes de h3 en un seul tronçon, oubliez jquery.

var element = document.getElementById('element'); 
var headings = element.getElementsByTagName('h3'); 
var length = headings.length; 
var newHtml; 

for(i=0;i<length;i++){ 

    newHtml = headings[i].innerHTML; 

    ...test newHtml 
} 
0

vous mixez avec javascript jQuery comme dans element[i].html(); votre code devrait être comme ça

function myfunction(){ 
    var element = document.getElementsByName('element'); 
    var length = element.length; 
    var newHtml; 
    for(i=0;i<length;i++){ 
     newHtml = element[i].innerHTML; 
    } 
} 

Notez que document.getElementById() ne retourne un résultat, donc vous devez « élément » mis en nom attr. et franchement .each est beaucoup plus facile

Questions connexes