2010-06-30 28 views
5

Làm thế nào để sử dụng jQuery .each() trên một chuỗijQuery .each() với chuỗi

 

// For Exmaple 

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

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

// mã isnt trên tung ra một cảnh báo cho mỗi div trong chuỗi? Tôi cung không chăc tại sao?

Trả lời

7

Cách bạn đang thực hiện, bạn đang tìm kiếm các phần tử div bên trong các phần tử được truyền. Về cơ bản tương đương với việc thực hiện .find().

Điều bạn muốn là filter() sẽ lọc qua các phần tử cấp cao nhất trong bộ sưu tập bạn đã vượt qua.

Kiểm tra nó ở đây:http://jsfiddle.net/u5uDg/

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

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

Nếu bạn muốn sử dụng cách tiếp cận của bạn, bạn sẽ cần phải cung cấp cho các div yếu tố cha mẹ mà jQuery có thể thực hiện tìm.

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

Theo yêu cầu trong bình luận của bạn, bạn có thể trì hoãn thực hiện các mã trong .each() sử dụng setTimeout() và đến thời gian của mỗi bằng cách nhân số lần lặp hiện bởi số lượng mili giây bạn muốn trì hoãn.

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

Cảm ơn bạn rất nhiều, thêm 1 câu hỏi làm cách nào để đặt trễ 2 giây như vậy .delay ('200'); trên mỗi cuộc gọi lại đó. Vì vậy, đối với mỗi div trong mystring, cảnh báo ('làm một cái gì đó'); cứ 2 giây một lần. – kr1zmo

+0

btw Pattrick cảm ơn vì trang web jsFiddle cảm ơn rất nhiều. – kr1zmo

+0

@ kr1zmo sử dụng setInterval http://www.w3schools.com/jsref/met_win_setinterval.asp – Mark

1

Tùy thuộc vào ý định của bạn, mã jQuery sẽ trông khác.

Để lặp qua các div có nội dung, các div không cần phải được gán cho một biến trong javascript. Họ chỉ có thể sống trong html:

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

Sau đó, kịch bản của bạn sẽ trông giống như dưới đây và bạn sẽ thấy các cảnh báo:

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

Nếu bạn đang cố gắng để lặp qua một mảng mystring , mã của bạn sẽ trông giống như sau:

var mystring = '<div class="mystring">bleh content</div><div class="mystring">blehhh content</div>'; 
$.each(mystring, function(e) { 
    alert('do something'); 
}); 
Các vấn đề liên quan