2012-05-06 29 views
7

Mã html:

<table id='table'> 
    <tr> 
     <td>..</td> 
    </tr> 
</table> 

Mã js với jquery:

var l1 = $('#table > tr').length; 
var l2 = $('#table tr').length; 
alert(l1+','+l2);​ 

Kết quả:

0,1 

Tại sao #table > tr đầu tiên nhận được 0?

Bạn có thể thấy một bản demo trực tiếp từ đây: http://jsfiddle.net/Freewind/PmsFQ/

+0

Vui lòng đi câu hỏi * khác * và đóng câu hỏi này nếu được bảo đảm (câu hỏi này được viết tốt hơn và nhiều hơn nữa cho điểm). –

+0

@pst: Xong. Nó luôn luôn làm cho tôi một chút khó chịu khi biết mô tả gần gũi nói "đây là giống như * câu hỏi * trước đó", nhưng tôi nghĩ rằng nó không sao trong trường hợp này. – BoltClock

Trả lời

13

Bởi vì trẻ em trực tiếp của một <table> chỉ có thể là <thead>, <tbody>, hoặc <tfoot> (hoặc <colgroup> hoặc <caption>, nhưng những người không chứa hàng).

DOM của trình duyệt sẽ ẩn hoàn toàn đi lạc <tr> s trong một <tbody>. (đối với các trình duyệt không thực hiện việc này, jQuery sẽ thay thế nó)

Bạn cần phải viết $('#table > tbody > tr').

+0

Câu thứ hai là đúng cho HTML (cũng như HTML5), nhưng không phải là XHTML. Xem [những] (http://stackoverflow.com/a/5568877/106224) hai [câu trả lời] (http://stackoverflow.com/a/7491956/106224). – BoltClock

3

Điều này là do trình duyệt tự động chèn phần tử <tbody> giữa <table><tr> của bạn, sao cho các hàng không còn là con trực tiếp trong bảng của bạn nữa.

2

Trình duyệt của bạn đang thêm yếu tố tbody để tr không phải là con của bảng.

+0

Họ sẽ vẫn là hậu duệ trực tiếp của bảng ... Chỉ cần không phải là con cái của nó :-) – Hubro

+0

@Codemonkey Đó là những gì tôi có nghĩa là bởi "_direct_ hậu duệ." Nhưng vâng, đứa trẻ thì tốt hơn. –

+0

@Codemonkey: ["hậu duệ trực tiếp" giống như "con" ...] (http://stackoverflow.com/a/3225905/106224) – BoltClock

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