2010-09-10 38 views
59

Tôi có một cấu trúc bảng như thế này:Làm thế nào để có được chỉ phần tử con trực tiếp bằng chức năng jQuery

<table1> 
    <tbody> 
    <tr> 
     <td></td> 
     ... 
     <td> 
     <table2> 
      <tbody> 
      <tr> 
       <td></td> 
      </tr> 
      </tbody> 
     </table> 
     </td> 
    </tr> 
    </tbody> 
    </table> 

Trong javascript, tôi có một biến tbl với giá trị của $(table1), và sau đó tôi muốn có được tất cả các con trực tiếp các phần tử (tr) của <tbody> của table1. Mã của tôi là:

$('tr', tb1) 

Rõ ràng nó sẽ trả về tất cả các yếu tố trong <tr> table1 và table2. Tôi nghĩ rằng tôi có thể nhận được bởi

$('tr', tb1).not(function(){return $(this).parent().parent()[0] != tb1;}) 

hoặc loại logic này.

Tôi biết $('table1 > tbody > tr') có thể nhận con trực tiếp tr. Thật không may tôi không thể sử dụng điều này.

Bất cứ ai cũng có ý tưởng tốt về điều này?

Cảm ơn.

Trả lời

136

Bạn có thể sử dụng find():

tbl.find("> tbody > tr")

+1

đây là ý tưởng bralliant. $ ('> tbody> tr', tb1) cũng hoạt động đối với tôi. Cảm ơn bạn. –

+0

Điều này thật tuyệt vời, tôi không biết rằng bạn có thể sử dụng bộ chọn con trực tiếp ('>') mà không chỉ định bất kỳ thứ gì ở phía trước nó. Cảm ơn bạn. – silkfire

+2

Lưu ý rằng đối với trẻ em trực tiếp chỉ có một cấp độ xuống, bạn chỉ có thể sử dụng 'trẻ em ([chọn]]'. – orad

0
+2

Điều này sẽ chỉ hoạt động nếu 'tb1' là một thẻ HTML, mà nó không phải là; và nếu 'tr' là con trực tiếp của nó (nó không phải là, nó là con trực tiếp của' '). –

4

Đây chính là lý do tại sao người ta nên cẩn thận với những chiếc bàn làm tổ. Tôi thực sự hy vọng rằng bạn sử dụng chúng cho dữ liệu và không bố trí trang. Một vấn đề khác có thể sẽ làm hỏng ngày của bạn là sử dụng bộ chọn CSS trên các bảng lồng nhau ... về cơ bản bạn có cùng một vấn đề - bạn không thể chọn các phần tử TR của bảng ngoài mà không chọn các phần tử bên trong bảng bên trong. (Bạn không thể sử dụng bộ chọn con bởi vì nó không được thực hiện trong IE6)

này nên làm việc:

$("#table1 > tbody > tr") 

Tuy nhiên, tôi khuyên bạn nên hardcode các yếu tố tbody, vì bạn không nên dựa vào trình duyệt để tạo nó cho bạn.

10

Như @ jave.web đề cập trong các ý kiến ​​

Để tìm kiếm thông qua các con trực tiếp của một phần tử sử dụng .children(). Nó sẽ chỉ tìm kiếm thông qua các trẻ em trực tiếp và không đi qua bất kỳ sâu hơn. http://api.jquery.com/children/

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