Cách chỉ lấy các phần tử con trực tiếp bằng hàm jQuery


89

Tôi có cấu trúc bảng như sau:

<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 tblcó giá trị là $(table1), và sau đó tôi muốn nhận tất cả các phần tử con trực tiếp (tr) <tbody>của table1. Mã của tôi là:

$('tr', tb1)

Rõ ràng nó trả về tất cả các <tr>phần tử trong table1 và table2. Tôi nghĩ tôi có thể vượt qua

$('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 được con trực tiếp tr. Thật không may, tôi không thể sử dụng cái này.

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

Cảm ơn.

Câu trả lời:


178

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

tbl.find("> tbody > tr")


2
đây là một ý tưởng dũng cảm. $ ('> tbody> tr', tb1) cũng phù hợp với tôi. Cảm ơn bạn.
Jason Li

1
Đ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 cần chỉ định bất kỳ thứ gì trước nó. Cảm ơn bạn.
silkfire,

3
Lưu ý rằng đối với con cái trực tiếp chỉ thấp hơn một cấp, bạn có thể chỉ cần sử dụng 'con ([selector])'.
orad,

37
TRỰC TIẾP TRẺ EM = một cấp xuống con , do đó api.jquery.com/children là câu trả lời đúng, không tìm thấy () - đó là một nhận TẤT CẢ hậu duệ của nguyên tố (lọc bởi selector) ...
jave.web

4
Bạn nên đặt nhận xét của mình thành một câu trả lời riêng biệt trên jave.web vì câu trả lời của bạn là câu trả lời chính xác.
mrmillsy

23

Như @ jave.web đã đề cập trong các nhận xét

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


5

Đây chính xác là lý do tại sao người ta nên cẩn thận với các bảng lồng nhau. Tôi thực sự hy vọng rằng bạn sử dụng chúng cho dữ liệu chứ không phải bố cục 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ũng gặp phải vấn đề tương tự - bạn không thể chọn phần tử TR của bảng bên 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 vì nó không được triển khai trong IE6)

Điều này sẽ hoạt động:

$("#table1 > tbody > tr")

Tuy nhiên, tôi khuyên bạn nên mã hóa cứng phần tử TBODY, vì bạn không nên dựa vào trình duyệt để tạo nó cho bạn.



Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.