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));
});
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
btw Pattrick cảm ơn vì trang web jsFiddle cảm ơn rất nhiều. – kr1zmo
@ kr1zmo sử dụng setInterval http://www.w3schools.com/jsref/met_win_setinterval.asp – Mark