2012-05-06 13 views
7

html kodunu (her zaman 0 döndürür)

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

sonucu: İlk #table > tr 0 olsun Neden

0,1 

?

Buradan bir canlı demo görebilirsiniz:

+0

Lütfen * diğer * sorusuna gidip, bunun garanti edilmesi için bunu kapatın (bu soru daha iyi ve daha çok noktaya yazılır). –

+0

@pst: Bitti. Bu, "bu daha önceki * soruların aynısıdır" diyerek, yakın anlatmanın bilindiğini bilerek beni her zaman biraz rahatsız ediyor, ama bence bu durum iyi. – BoltClock

cevap

13

bir <table> doğrudan çocuklar sadece <thead>, <tbody> veya <tfoot> olabileceğinden http://jsfiddle.net/Freewind/PmsFQ/ (veya <colgroup> veya <caption>, ancak bu satırları içermezler).

Tarayıcının DOM'si, <tbody> numaralı telefondan <tr> s yolunu örtülü olarak sarmaya devam edecektir. (bunu yapmayan tarayıcılar için, jQuery bunu yerine getirir)

$('#table > tbody > tr') yazmanız gerekir.

+0

İkinci cümle, HTML (HTML5'in yanı sıra) için doğrudur, ancak XHTML için geçerli değildir. Bunlara bakın [http://stackoverflow.com/a/5568877/106224] iki [cevap] (http://stackoverflow.com/a/7491956/106224). – BoltClock

3

Bunun nedeni, tarayıcıların artıkve <tr> arasındaki <tbody> öğeyi otomatik olarak eklemesidir, böylece satırlar artık tablonuzun doğrudan çocukları değildir.

2

Tarayıcınız tbody öğeye ekliyor dolayısıyla tr tablonun alt öğesi değil.

+0

Onlar hala masanın soyundan gelenler olacak ... Sadece onun değil çocuklar :-) – Hubro

+0

@Codemonkey "_direct_ descendant." Ama evet, çocuk daha iyi. –

+0

@Codemonkey: ["doğrudan torun", "çocuk" ile aynıdır ...] (http://stackoverflow.com/a/3225905/106224) – BoltClock

İlgili konular