2012-05-06 12 views
7

El código html:

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

El código JS con jQuery:

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

El resultado:

0,1 

¿Por qué la primera #table > tr obtener 0?

se puede ver una demostración en vivo de aquí: http://jsfiddle.net/Freewind/PmsFQ/

+0

Haga clic en la * otra * pregunta y ciérrela si está justificado (esta pregunta se escribe mejor y más al grano). –

+0

@pst: Listo. Siempre me pone un poco incómodo al saber que la descripción cercana dice "esto es lo mismo que * preguntas * anteriores", pero creo que está bien en este caso. – BoltClock

Respuesta

13

Debido a que los hijos directos de un <table> sólo pueden ser <thead>, <tbody> o <tfoot> (o <colgroup> o <caption>, pero los que no contienen filas).

El DOM del navegador implícitamente envolverá <tr> s en <tbody>. (para los navegadores que no hacen esto, jQuery lo falsifica)

Debe escribir $('#table > tbody > tr').

+0

La segunda oración es verdadera para HTML (así como para HTML5), pero no para XHTML. Ver [estos] (http://stackoverflow.com/a/5568877/106224) dos [respuestas] (http://stackoverflow.com/a/7491956/106224). – BoltClock

3

Esto se debe a que los navegadores insertan automáticamente el elemento <tbody> entre su <table> y <tr>, de tal manera que las filas ya no son los hijos directos de su mesa.

2

Su navegador está agregando un elemento tbody por lo que tr no es el elemento secundario de la tabla.

+0

Seguirán siendo descendientes directos de la tabla ... Simplemente no son los hijos de ella :-) – Hubro

+0

@Codemonkey Eso es lo que quise decir con "_direct_ descenddant". Pero sí, el niño es mejor. –

+0

@Codemonkey: ["descendiente directo" es lo mismo que "hijo" ...] (http://stackoverflow.com/a/3225905/106224) – BoltClock

Cuestiones relacionadas