Tôi đang cố gắng hiểu cách viết mã đúng.Thêm một số thuộc tính vào tất cả các mục đã chọn, mục nào là đúng và tại sao?
HTML My
<div id="foo">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
Nếu tôi muốn thêm lớp bar
cho tất cả các trẻ em divs của div foo
, cách mà tôi nên sử dụng?
Lựa chọn 1 (hóa ra 3)
jQuery('#foo > div').addClass('bar');
Lựa chọn 2 (hóa ra 4 nhanh nhất)
jQuery('#foo').children('div').addClass('bar');
Lựa chọn 3 (hóa ra là nhanh nhất)
jQuery('#foo').children('div').each(function(){
jQuery(this).addClass('bar')
});
Lựa chọn 4 (hóa ra 2 rất gần)
jQuery('#foo > div').each(function(){
jQuery(this).addClass('bar')
});
Những tất cả hoàn thành những gì tôi muốn. Câu hỏi của tôi là,
Tôi nên sử dụng cái nào hơn cái kia? Tôi nên sử dụng những trường hợp nào .each
?
Sửa với đoạn thêm vào trong đó cho thấy sử dụng mỗi là tốt hơn so với methords khác
var t0_start = performance.now();
$('#parent > div').addClass('bar');
var t0_end = performance.now();
var t1_start = performance.now();
$('#parent').children('div').addClass('bar');
var t1_end = performance.now();
var t2_start = performance.now();
$('#foo > div').each(function(){
$(this).addClass('bar')
});
var t2_end = performance.now();
var t3_start = performance.now();
$('#foo').children('div').each(function(){
$(this).addClass('bar')
});
var t3_end = performance.now();
outcome = 'selector: ' + (t0_end - t0_start);
outcome += "\n";
outcome += 'children(): ' + (t1_end - t1_start)
outcome += "\n";
outcome += 'selector: each(): ' + (t2_end - t2_start)
outcome += "\n";
outcome += 'children(): each(): ' + (t3_end - t3_start)
alert(outcome);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="parent"><div></div><div></div><div></div></div>
Kết quả tôi nhận được thời gian cho selector: each() < thời gian cho trẻ em(): mỗi() < thời gian cho bộ chọn: < thời gian cho selector: < thời gian cho trẻ em():
Sử dụng 'mỗi' khi bạn không thể hoàn thành những gì bạn đang làm mà không cần lặp lại. – tymeJV