2010-06-30 3 views
5

Comment puis-je utiliser jQuery .each() sur une chaînejQuery .each() avec la chaîne

 

// For Exmaple 

var mystring = '<div> bleh content </div> <div> bleh content </div>'; 

$('div', mystring).each(function(e) { 
    alert('do something'); 
}); 
 

// le code ci-dessus isnt lancer une alerte pour chaque div dans la chaîne? Je ne suis pas sûr pourquoi?

Répondre

7

La façon dont vous le faites, vous recherchez div éléments à l'intérieur des éléments transmis. Fondamentalement équivalent à faire un .find().

Ce que vous voulez, c'est filter() qui va filtrer sur les éléments de niveau supérieur dans la collection que vous avez passé.

test ici:http://jsfiddle.net/u5uDg/

var mystring = '<div> bleh content </div> <div> bleh content </div>'; 

$(mystring).filter('div').each(function(e) { 
    alert('do something'); 
}); 

Si vous voulez utiliser votre approche, vous devez donner les éléments div un parent sur lequel jQuery peut effectuer la découverte.

http://jsfiddle.net/u5uDg/1/

 // Added parent <div> element 
var mystring = '<div><div> bleh content </div> <div> bleh content </div></div>'; 

$('div', mystring).each(function(e) { 
    alert('do something'); 
}); 

Comme demandé dans votre commentaire, vous pouvez retarder l'exécution du code dans le .each() en utilisant setTimeout() et d'arriver à la durée de chaque en multipliant le nombre d'itérations en cours par le nombre de millisecondes que vous voulez retarder.

http://jsfiddle.net/u5uDg/6/

var mystring = '<div> bleh content </div> <div> bleh content </div>'; 

    // Get the length 
var length = $(mystring).filter('div').length; 

$(mystring).filter('div').each(function(e) { 
    // setTimeout is used to delay code from executing. 
    // Here we multiply e (which is the index of the current 
    // iteration) by 2000 milliseconds, so each iteration 
    // is delayed by an additional 2000ms 
    (function(th) { 
     setTimeout(function() { 
       alert($(th).text()); 
       if(!--length) { alert('done'); } // alert if done 
     }, e * 2000); 
    }(this)); 
});​ 
+0

Pattrick merci beaucoup, 1 question de plus comment pourrais-je mettre un délai de 2 secondes comme si .delay ('200'); sur chacun de ces rappels. Donc, pour chaque div dans mystring, alerter («faire quelque chose»); toutes les 2 secondes – kr1zmo

+0

btw Pattrick merci pour ce site jsFiddle merci beaucoup. – kr1zmo

+0

@ kr1zmo utiliser setInterval http://www.w3schools.com/jsref/met_win_setinterval.asp – Mark

1

En fonction de votre intention, le code jQuery sera différent.

Pour parcourir des divs avec du contenu, les divs n'ont pas besoin d'être affectés à une variable dans le javascript. Ils peuvent tout simplement vivre dans le code HTML:

<div class="mystring">bleh content</div> 
<div class="mystring">blehhh content</div> 

Ensuite, votre script ressemblera ci-dessous et vous devriez voir les alertes:

$('div.mystring').each(function(e) { 
    alert('do something'); 
}); 

Si vous essayez de parcourir un tableau de mystring , votre code ressemblerait à ceci:

var mystring = '<div class="mystring">bleh content</div><div class="mystring">blehhh content</div>'; 
$.each(mystring, function(e) { 
    alert('do something'); 
});