2012-05-06 49 views
7

的HTML代碼:

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

jquery的JS代碼:

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

結果:

0,1 

爲什麼第一#table > tr得到0?

從這裏你可以看到現場演示:http://jsfiddle.net/Freewind/PmsFQ/

+0

如果有必要,請轉到其他問題並關閉此問題(此問題寫得更好,更重要)。 – 2012-05-06 07:15:18

+0

@pst:完成。它總是讓我有點不安,因爲知道密切的描述說「這與以前的*問題一樣」,但我認爲在這種情況下是可以的。 – BoltClock

回答

13

因爲<table>的直接孩子只能是<thead><tbody>,或<tfoot>(或<colgroup><caption>,但那些不包含行)。

瀏覽器的DOM將隱含地將<tr> s中的雜散包裝在<tbody>中。 (對於不這樣做的瀏覽器,jQuery取而代之)

您需要編寫$('#table > tbody > tr')

+0

第二句對於HTML(以及HTML5)是正確的,但不是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_後裔」。但是,孩子更好。 – 2012-05-06 02:00:49

+0

@Codemonkey:[「直接後代」是一樣的「孩子」...](http://stackoverflow.com/a/3225905/106224) – BoltClock

相關問題