2010-03-04 14 views
15

Al momento ho una tabella con una tabella nidificata in essa:jQuery seleziona solo tr/td nella tabella principale, non le tabelle nidificate.

<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> 

ecc struttura della tabella.

Attualmente sto usando il seguente jQuery, che si attiva su ogni tr indipendentemente dal livello della tabella. Come posso cambiarlo per sparare solo al primo livello?

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

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

risposta

29

Usare il child selector > di selezionare solo i tr elementi che sono un figlio del tavolo del tbodyrapporto, ad esempio:

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

Grazie per la pronta risposta. Io nuovo era qualcosa di veramente semplice. – TheAlbear

0

Volete

$("#report>tr") 

Il > significa discendente diretto (figlio), piuttosto che qualsiasi discendente.

+2

Questo non funzionerà perché 'tr 'non è un discendente DIRETTO di' table'. 'tbody' è nel mezzo. – mbm29414

3

si utilizza il selettore > di indirizzare solo il diretto discendente di un elemento. È necessario indirizzare l'elemento tbody implicita all'interno della tabella anche:

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

con questa soluzione non importa se si dispone di un tag tbody tra:

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

La mia comprensione è questa: prima selezionerà solo uno dalla tabella principale. Tuttavia, OP sembra voler selezionare tutti i tr dalla tabella principale. – Panther

+2

La comprensione corretta è che una volta trovato il primo tag 'tr', viene preso il genitore di quel file e quindi tutti i bambini all'interno verranno restituiti. Quindi tutti gli elementi 'tr' della' tabella' selezionata verranno restituiti –

+0

La natura più generica di questo approccio lo rende migliore della risposta accettata per questa domanda. – CodeMonkeyG

Problemi correlati