2010-09-10 22 views
59

que tengo una estructura de tabla como la siguiente:Como llegar sólo elementos hijos directos de la función jQuery

<table1> 
    <tbody> 
    <tr> 
     <td></td> 
     ... 
     <td> 
     <table2> 
      <tbody> 
      <tr> 
       <td></td> 
      </tr> 
      </tbody> 
     </table> 
     </td> 
    </tr> 
    </tbody> 
    </table> 

en JavaScript, tengo una variable tbl con valor de $(table1), y luego quiero conseguir todos los niños directa elementos (tr) de <tbody> de table1. Mi código es:

$('tr', tb1) 

Al parecer, devuelve todos los elementos <tr> en tabla1 y tabla2. Creo que puedo recibir al

$('tr', tb1).not(function(){return $(this).parent().parent()[0] != tb1;}) 

o este tipo de lógica.

$('table1 > tbody > tr') puede conseguir el niño directo tr. Lamentablemente no puedo usar esto.

¿Alguien tiene una buena idea sobre esto?

Gracias.

Respuesta

136

Puede utilizar find():

tbl.find("> tbody > tr")

+1

esta es la idea de Bralliant. $ ('> tbody> tr', tb1) también funciona para mí. Gracias. –

+0

Esto es maravilloso, no sabía que podía usar el selector directo de niños ('>') sin especificar nada delante de él. Gracias. – silkfire

+2

Tenga en cuenta que para los niños directos que solo tienen un nivel abajo, simplemente puede usar 'niños ([selector])'. – orad

0
+2

Esto solo funcionaría si 'tb1' fuera una etiqueta HTML, que no lo es; y si 'tr' era un hijo directo de él (que no lo es, es un hijo directo de' '). –

4

Esta es exactamente la razón por la que uno debe tener cuidado con mesas nido. Realmente espero que los uses para datos y no para el diseño de la página.

Otro problema que probablemente arruine su día es usar selectores CSS en tablas anidadas ... básicamente tiene el mismo problema: no puede seleccionar elementos TR de la tabla externa sin seleccionar también aquellos dentro de la tabla interna. (No se puede utilizar el selector de hijo porque no se implementa en IE6)

Esto debería funcionar:

$("#table1 > tbody > tr") 

Sin embargo, le recomiendo que codificar el elemento TBODY, ya que no se debe confiar en que el navegador crearlo para ti.

10

Como @ jave.web mencionado en los comentarios

Para buscar a través de los hijos directos de un elemento .children() utilizar. Solo buscará a través de los niños directos y no atravesará más. http://api.jquery.com/children/

Cuestiones relacionadas