2013-04-30 36 views
8

Với jquery có vẻ như có hai cách để tìm một mục danh sách trong một danh sách không có thứ tự trong DOM.bộ chọn css vs jquery traversal

$("ul>li"); 

$("ul").find("li"); 

Có một lý do tại sao sau này có thể là một lợi thế hơn? Có vẻ như một người sẽ cần thêm mã để có được kết quả tương tự.

+1

'find' chọn tất cả các phần tử con phù hợp,'> 'là bộ chọn con trực tiếp. Điều này cho thấy bạn chưa đọc tài liệu jQuery. – undefined

+0

Bạn đã sai. '$ (" ul> li ")' sẽ tìm đầu tiên 'li' cho bất kỳ' ul', trong đó '$ (" ul "). tìm (" li ")' sẽ tìm tất cả 'li' trong mỗi' ul' . Bạn có nghĩa là trong trường hợp đầu tiên: '$ (" ul li ")' phải không? – WooCaSh

+0

* Nó phụ thuộc *. Trong hầu hết các trường hợp, cố gắng quyết định phiên bản nào sẽ sử dụng dựa trên hiệu suất là tối ưu hóa trước khi trưởng thành, vì vậy trong hầu hết các trường hợp, bạn nên chọn phiên bản dễ bảo trì hơn và/hoặc dễ đọc/dễ hiểu hơn nhanh hơn. –

Trả lời

11

Yup. Tốc độ. .find() sẽ giành chiến thắng mọi lúc. Và tốc độ xử lý là tương đương!

jsPerf speed test to show what I mean

Mặc dù .find() sẽ nhận được tất cả mọi thứ đó là một cấp dưới (trẻ em, trẻ em của trẻ em, trẻ em trẻ em trẻ em, vv), và > là một chọn con trực tiếp. Của nó một tốt hơn táo táo-to-để so sánh hai điều sau đây:

  • $('ul li') vs $('ul').find('li')
  • $('ul > li') vs $('ul').children('li')

Mặc dù nếu bạn làm .find('li') nó sẽ vẫn là cách nhanh nhất để làm điều đó, thậm chí nhanh hơn .children('li').

updated jsPerf to include .children()

0

1) họ không giống nhau, hình thức thứ hai sẽ tương đương với $("ul li"); và là người đầu tiên tương đương với $("ul").children("li")

2) Nếu bạn đang sử dụng hình thức thứ hai, bạn đơn giản hóa nhiệm vụ phân tích cú pháp của jQuery. Nhưng nó làm cho mã của bạn ít đơn giản hơn vì vậy tôi sẽ không khuyên bạn nên nó trừ khi bạn đã chứng minh tốc độ là rất có liên quan trong trường hợp của bạn. Điều này đang được nói rằng bạn thường có nhiều mã hơn với ví dụ một số bộ nhớ đệm yếu tố, hoặc một số chức năng vượt qua khác, biện minh cho việc sử dụng find.