2010-03-04 18 views
15

Actualmente tengo una tabla con una tabla anidada en ella:jQuery selecciona solo tr/td en la tabla principal, no en las tablas anidadas.

<table class="datagrid" id="report"> 
     <thead> 
     <tr> 
      <th>item1</th> 
      <th>item2</th> 
     </tr> 
     </thead> 
     <tbody> 
     <tr class="odd"> <-- on click from this level only 
     <td></td> 
     <td></td> 
     </tr> 
     <tr> 
     <td colspan="2"> 
     <table> 
      <tr class="odd"> <-- not to be fired here 
      <td></td> 

etc estructura de la tabla.

Actualmente estoy usando el siguiente jQuery, que se activa en cada tr independientemente del nivel de la tabla. ¿Cómo lo cambio para disparar solo en el primer nivel?

$(document).ready(function(){ 
      $("#report tr:not(.odd)").hide(); 
      $("#report tr:first-child").show(); 

      $("#report tr.odd").click(function(){ 
       $(this).next("#report tr").fadeToggle(600); 
      }); 
     }); 

Respuesta

29

Uso del child selector > seleccionar solamente aquellos tr elementos que son un niño de la informe la mesa de tbody, por ejemplo:

$("#report > tbody > tr.odd") 
+0

Gracias por la respuesta rápida. Yo nuevo, era algo realmente simple. – TheAlbear

0

¿Quieres

$("#report>tr") 

El > significa descendiente directo (hijo), más que cualquier descendiente.

+2

Esto no funcionará porque 'tr 'no es un descendiente DIRECTO de' tabla'. 'tbody' está en el medio. – mbm29414

3

utiliza el selector de > empleando solamente el descendiente directo de un elemento. Usted tiene que apuntar el elemento tbody implícita dentro de la tabla también:

$('#report>tbody>tr.odd') 
9

con esta solución, no importa si usted tiene una etiqueta tbody en el medio:

$('table').find('tr:first').parent().children() 
+0

Según tengo entendido, primero seleccionará solo uno de la tabla principal. Sin embargo, parece que OP busca seleccionar todos los tr de la tabla principal. – Panther

+2

El entendimiento correcto es que una vez que se encuentra la primera etiqueta 'tr', se toma el elemento primario y se devuelven todos los elementos secundarios. Por lo tanto, se devolverán todos los elementos 'tr' de la' tabla' seleccionada –

+0

La naturaleza más genérica de este enfoque lo hace mejor que la respuesta aceptada para esta pregunta. – CodeMonkeyG

Cuestiones relacionadas