2010-06-30 19 views
5

Jak używać jQuery() .each na sznurkujQuery .each() z ciągiem

 

// For Exmaple 

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

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

// powyższy kod isnt uruchomienie alarmu dla każdego div w ciągu? Nie jestem pewien, dlaczego?

Odpowiedz

7

Sposób, w jaki to robisz, polega na wyszukiwaniu elementów wewnątrz przekazanych elementów. Zasadniczo równoważny wykonaniu .find().

To, czego potrzebujesz, to filter(), które będzie filtrować elementy najwyższego poziomu w kolekcji, którą przekazałeś.

przetestować go tutaj:http://jsfiddle.net/u5uDg/

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

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

Jeśli chciał wykorzystać swoje podejście, trzeba by dać div elementy rodzica, na których można wykonać jQuery znaleźć.

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'); 
}); 

Zgodnie z wnioskiem w swoim komentarzu, można opóźnić wykonanie kodu w .each() wykorzystaniem setTimeout() i przybywających na czas trwania każdego mnożąc bieżący numer iteracji przez liczbę milisekundy, które chcesz opóźnić.

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 dzięki tak dużo, jeszcze 1 pytanie w jaki sposób mogę umieścić jak 2-sekundowego opóźnienia tak .delay („200”); na każdym z tych wywołań zwrotnych. Tak więc dla każdego div in mystring, alert ("zrób coś"); co 2 sekundy. – kr1zmo

+0

btw Pattrick dzięki za tę stronę jsFiddle bardzo dziękuję. – kr1zmo

+0

@ kr1zmo użyj setInterval http://www.w3schools.com/jsref/met_win_setinterval.asp – Mark

1

zależności od intencji, kod jQuery będzie wyglądać inaczej.

Do iteracji div z treścią, div nie muszą być przypisane do zmiennej w javascript. Mogą po prostu żyć w html:

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

Następnie skrypt będzie wyglądał jak poniżej i powinien pojawić się ostrzeżenia:

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

Jeśli próbujesz wykonać iterację tablicy mystring Twój kod będzie wyglądać następująco:

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