2012-05-06 20 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>の迷惑を<tbody>にラップします。 (これをしないブラウザの場合は、代わりにjQueryが偽造します)

$('#table > tbody > tr')と書く必要があります。

+0

2番目の文は、HTML(およびHTML5)ではtrueですが、XHTMLではtrueです。 [これらの](http://stackoverflow.com/a/5568877/106224)2つの[回答](http://stackoverflow.com/a/7491956/106224)を参照してください。 – BoltClock

3

これは、ブラウザが<table><tr>の間に自動的に<tbody>要素を挿入して、行がテーブルの直接の子ではなくなるためです。

2

お使いのブラウザはtbodyという要素を追加していますので、trはテーブルの子ではありません。

+0

彼らはまだテーブルの直系の子孫になるでしょう...それだけではありません:-) – Hubro

+0

@Codemonkeyそれは私が "_direct_子孫"の意味です。しかし、ええ、子供はより良いです。 –

+0

@Codemonkey:["直接子孫"は "子"と同じです...](http://stackoverflow.com/a/3225905/106224) – BoltClock

関連する問題