2011-12-06 22 views
11

Trong jQuery documentation for the child selector tôi thấy ghi chú này:Cách thích hợp mới để sử dụng bộ chọn con với một nút bối cảnh trong jQuery là gì?

Lưu ý: Các selector $("> elem", context) sẽ bị phản đối trong một thông cáo trong tương lai. Do đó, việc sử dụng nó không được khuyến khích thay cho việc sử dụng các bộ chọn thay thế.

tôi sử dụng mô hình này tất cả các thời gian, thường là như thế này:

$nodes.find('> children[something=morecomplicated] > somethingelse'); 

Tuy nhiên, tôi không hiểu những gì các "bộ chọn thay thế" họ đề cập đến có thể được. Cách nào đúng để viết bộ chọn đi ngang qua các nút con ngay lập tức của một nút ngữ cảnh? Là tiền thưởng, bất cứ ai có thể giải thích lý do tại sao điều này được khấu hao? Tất cả các lựa chọn thay thế mà mọi người đều cho là đáng kinh ngạc xấu xí.

Dưới đây là một số điều mà không công việc:

// does not guarantee that '.child' is an immediate child 
$nodes.find('.child > .grandchild'); 

// this will return empty array in recent jQuery 
// and will return full list of children in older jQuery 
$nodes.children('.child > .grandchild'); 

// Anything like this which forces you to split up the selector. 
// This is ugly and inconsistent with usual selector ease-of-use, 
// and is a non-trivial conversion for long or complex selectors. 
$nodes.children('.child').children('.grandchild'); 
// After all, no one would ever recommend 
$nodes.find('.this').children('.that'); 
// instead of 
$nodes.find('.this > .that'); 
+1

Xem ở đây để biết thêm thông tin: http: // stackoverflow. com/questions/7833558/child-selector-deprecated –

+0

Ah, tôi không thấy câu hỏi đó ngay cả sau khi tìm kiếm siêng năng. Không ai trong số các câu trả lời thực sự là rất thỏa đáng, mặc dù. –

+0

Bạn chắc chắn nâng cao điểm tốt. Tuy nhiên, trừ khi bạn phát hiện ra điều gì đó mà tôi hiện không biết, tôi nghĩ rằng việc kết nối các cuộc gọi cho trẻ em và tách bộ chọn có lẽ là lựa chọn duy nhất của bạn. – Dan

Trả lời

14

Lý do họ đang nói:

Lưu ý: Các selector $("> elem", context) sẽ bị phản đối trong một thông cáo trong tương lai. Do đó, việc sử dụng nó không được khuyến khích thay cho việc sử dụng các bộ chọn thay thế.

Do dấu phẩy được theo sau bởi ngữ cảnh trong bộ chọn. Ví dụ. Tuy nhiên, $("> elem") là tốt, $("> elem", context) sẽ không còn được dùng nữa.

$("> elem", context) giống với $(context + "> elem").

Một cách chính xác có được con cháu là

$("elem").children('.child').children('.grandchild'); 

hoặc

context.children('.child').children('.grandchild'); 

hoặc

context.find('> .child > .grandchild'); 
+1

Không có gì sai với các lựa chọn thay thế được đề xuất, nhưng tôi phải bình luận về lý do được đưa ra. Toàn bộ điểm của '> elem' là nó giả định một số loại ngữ cảnh. '$ ("> elem ")' sẽ không được, trên thực tế, nó sẽ là vô nghĩa, bởi vì chính xác những gì "elem' có liên quan đến? Và '$ (context +"> elem ")' sẽ chỉ hoạt động nếu 'context' là một chuỗi chọn. – BoltClock

+1

Thực ra, tôi không hoàn toàn chắc chắn liệu họ có thực sự muốn nói rằng việc sử dụng đối số ngữ cảnh với một bộ chọn tương đối không được chấp nhận hoặc cú pháp trình chọn tương đối không được dùng nữa. Để làm cho vấn đề tồi tệ hơn, kể từ khi tài liệu của jQuery đã được thiết kế lại hoàn toàn, thông báo phản đối đã có tất cả nhưng biến mất. Tôi gần như bị cám dỗ để tạo ra một câu hỏi mới vì lý do này. – BoltClock

Các vấn đề liên quan