2010-03-04 6 views
15

Im Moment habe ich eine Tabelle mit einer geschachtelten Tabelle drin:jQuery Wählen Sie nur tr/td in der Haupttabelle, nicht verschachtelte Tabellen.

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

Ich verwende derzeit die folgende jQuery, die auf jedem tr unabhängig von der Tabellenebene ausgelöst wird. Wie ändere ich es, nur auf der ersten Ebene zu feuern?

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

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

Antwort

29

Verwenden Sie die child selector > nur wählen diejenigen tr Elemente, die ein Kind des Bericht Tisch tbody, zum Beispiel sind:

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

Danke für die schnelle Antwort. Ich neu es war etwas wirklich einfaches. – TheAlbear

0

Sie wollen

$("#report>tr") 

Die > bedeuten direkten Nachkommen (Kind), anstatt jeden Nachkommen.

+2

Dies, weil 'tr nicht funktionieren 'ist kein direkter Nachkomme von' table'. 'tbody' ist dazwischen. – mbm29414

3

Sie verwenden den > Wähler nur die direkte Nachkomme eines Elements zum Ziel. Sie haben das implizite tbody Element in der Tabelle auch zum Ziel: es spielt keine Rolle

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

mit dieser Lösung, ob Sie einen tbody-Tag in haben zwischen:

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

Mein Verständnis ist dies: zuerst wird nur eine aus der Haupttabelle auswählen. OP scheint jedoch nach der Auswahl aller tr aus der Haupttabelle zu suchen. – Panther

+2

Das richtige Verständnis ist, dass, sobald das erste "tr" -Tag gefunden wurde, das Elternteil davon genommen wird und dann alle darin enthaltenen Kinder zurückgegeben werden. Somit werden alle "tr" -Elemente der ausgewählten "Tabelle" zurückgegeben. –

+0

Die generische Art dieses Ansatzes macht es besser als die akzeptierte Antwort für diese Frage. – CodeMonkeyG

Verwandte Themen