2011-11-11 36 views
18

Tôi refactoring một số mã vào lúc này và đã đi qua một selector:Danh sách các bộ chọn được phân tách bằng dấu phẩy?

jQuery("tr","#ctl00_MainContent_MyUserControl").each(function(i,row) { ... } 

Dường như nó chọn <tr> 's từ điều khiển người dùng trên trang (bỏ qua thực tế là các trường hợp được đầy đủ tên !) nhưng đó không phải là cú pháp tôi quen thuộc và không thể tìm thấy bất kỳ thứ gì trong tài liệu. Tôi hy vọng nó sẽ được viết:

$("#ctl00_MainContent_MyUserControl tr").each(function(i,row) { ... } 

Bất cứ ai có thể cho tôi biết nếu có sự khác biệt (tinh tế hoặc khác) mà tôi đang thiếu ở đây ??

+0

Cú pháp đầu tiên hữu ích khi bối cảnh được lưu trong bộ nhớ cache và bạn muốn thực hiện các truy vấn nhanh trên đó. Tuy nhiên như đã đề cập trong một trong các câu trả lời, nó là euqal thành $ ('# ...') .find ('tr'). Cú pháp thứ hai được khuyến khích vì mục đích dễ đọc nếu bộ nhớ đệm không quan trọng. Hãy nhớ rằng khi bạn cache một cái gì đó, nó sẽ mất bộ nhớ vì vậy đôi khi các chi phí không có giá trị nó. – AlexStack

Trả lời

16

This selector chọn tất cả các phần tử tr bên trong một phần tử có id ctl00_MainContent_MyUserControl. Nó chính xác giống như ví dụ thứ hai của bạn.

Tham số thứ hai cung cấp ngữ cảnh cho thông số đầu tiên. Có trường hợp sử dụng tốt hơn cho cú pháp này, ví dụ:

function(el) { 
    $('tr', el).each(...); 
} 

Trường hợp el là một phần tử trên trang của bạn. Trong trường hợp này, bạn không thể sử dụng dạng cú pháp thứ hai.

+0

Điều này có giống như sử dụng '$ (el) .find ('tr')'? Nếu vậy, bất kỳ ý tưởng nào trong đó có hiệu quả hơn? – ksav

2

Đối số thứ hai cho hàm tạo jQuery (khi đầu tiên là bộ chọn) là ngữ cảnh .

Từ các tài liệu API

bối cảnh Một phần tử DOM, tài liệu, hay jQuery để sử dụng như là bối cảnh

Xem http://api.jquery.com/jQuery/

3

Đó là giống hệt nhau. Nó cũng có thể đã được viết:

$("#ctl00_MainContent_MyUserControl").find("tr").each(function(i,row) { ... } 

Cú pháp cho trước đây có thể được nhìn thấy trong jQuery constructor documentation. Về cơ bản, nó là "tìm tất cả các phần tử phù hợp với bộ chọn đầu tiên, đó là hậu duệ của phần tử thứ hai được so khớp thứ hai".

12

Gọi phương thức jQuery() với hai đối số (selectorcontext) is equivalent tojQuery(context).find(selector). Như vậy:

jQuery("tr","#ctl00_MainContent_MyUserControl"); 

bằng:

jQuery("#ctl00_MainContent_MyUserControl").find("tr"); 

đó cũng sẽ xảy ra là giống như:

jQuery("#ctl00_MainContent_MyUserControl tr"); 

ý kiến ​​cá nhân của tôi là việc sử dụng context chỉ có ý nghĩa khi bạn có thể chuyển một phần tử đã chọn ()hoặc DOM), không quá nhiều khi bạn chỉ cần vượt qua một bộ chọn (String). Trong trường hợp đó, tôi chỉ muốn bắt chước công cụ chọn CSS: ví dụ: #ctl00_MainContent_MyUserControl tr.

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