Như redsquare đã đề cập, thuật toán lựa chọn thay đổi trong phiên bản jQuery sau này (một phần do hỗ trợ getElementsByClassName). Ngoài ra, tôi đã thử nghiệm điều này với phiên bản jQuery mới nhất cho đến nay (v1.6) và cũng đã thêm một thử nghiệm cho document.getElementsByClassName để so sánh (hoạt động ít nhất trong Firefox 4 và Chrome).
Kết quả trong Firefox 4 là:
// With 100 non-form elements:
$('.myForm') : 366ms
$('form.myForm') : 766ms
document.getElementsByClassName('myForm') : 11ms
// Without any other elements:
$('.myForm') : 365ms
$('form.myForm') : 583ms
document.getElementsByClassName('myForm') : 11ms
Câu trả lời được chấp nhận là lỗi thời (và vẫn còn tìm thấy bằng cách tìm kiếm một cái gì đó như "cách hiệu quả để tìm các yếu tố trong jquery") và có thể gây nhầm lẫn cho người, vì vậy tôi cảm thấy rằng tôi phải viết điều này.
Ngoài ra, hãy xem sự khác biệt về thời gian giữa jQuery và các chức năng chọn trình duyệt gốc. Trong jQuery 1.2.6 $('.myForm')
là chậm hơn lần so với getElementsByClassName
, trong khi ở jQuery 1.6 đó là chậm chỉ về lần, nhưng vẫn nhanh hơn $('form.myForm')
(trái với câu trả lời đã lỗi thời).
Lưu ý: Kết quả thu được với Firefox 4 (kết quả tương tự với Chrome). Trong Opera 10 truy vấn với tên thẻ chỉ nhanh hơn một chút, nhưng Opera cũng hỗ trợ bản gốc nhanh hơn nhiều getElementsByClassName
.
mã kiểm tra:http://jsbin.com/ijeku5
có thể cung cấp cho các trường hợp thử nghiệm trên pastebin.me hoặc jsbin.com nickf? – redsquare
Có thể cũng phụ thuộc vào trình duyệt và bộ chọn CSS nào được hỗ trợ nguyên bản. –