2012-05-06 1 views
7

HTML 코드 (항상 0을 반환)

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

결과 : 첫 번째 #table > tr 0 얻을 왜

0,1 

?

당신은 여기에서 라이브 데모를 볼 수 있습니다

+0

* 다른 * 질문으로 가서 보증이 끝나면 닫으십시오 (이 질문은 더 잘 작성되었습니다). –

+0

@pst : 완료. 마지막 설명이 "이전 질문과 동일합니다"라는 것을 알면 항상 불안감을 느끼지만,이 경우에는 괜찮다고 생각합니다. – BoltClock

답변

13

<table>의 직접적인 아이 만 <thead>, <tbody>, 또는 <tfoot> 수 있기 때문에 http://jsfiddle.net/Freewind/PmsFQ/ (또는 <colgroup> 또는 <caption>, 그러나 그 행을 포함하지 않음).

브라우저의 DOM은 암시 적으로에 누락 된 <tr>을 줄 바꿈합니다. (이렇게하지 않는 브라우저의 경우 jQuery가 대신 가짜 임)

$('#table > tbody > tr')을 작성해야합니다.

+0

두 번째 문장은 HTML (HTML5는 물론)에서는 true이지만 XHTML에서는 그렇지 않습니다. [이] (http://stackoverflow.com/a/5568877/106224) 두 [답변] (http://stackoverflow.com/a/7491956/106224)를 참조하십시오. – BoltClock

3

브라우저가 <table><tr> 사이에 자동으로 <tbody> 요소를 삽입하여 더 이상 행이 테이블의 직접 하위가 아니기 때문입니다.

2

브라우저에 tbody 요소가 추가되어 있으므로 tr은 테이블의 하위 요소가 아닙니다.

+0

그들은 여전히 ​​테이블의 직접적인 자손이 될 것입니다. 단지 아이들이 아닙니다 :-) – Hubro

+0

@Codemonkey 그것은 "_direct_ descendant"의 의미입니다. 하지만 그래, 아이가 더 좋다. –

+0

@Codemonkey : [ "직접 자손"은 "자식"과 동일합니다 ...] (http://stackoverflow.com/a/3225905/106224) – BoltClock