2010-09-10 8 views
59

ich eine Tabellenstruktur wie diese erhalten:Wie Direktuntergeordneten Elemente von jQuery Funktion

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

In Javascript, ich habe eine Variable tbl mit dem Wert von $(table1), und dann will ich all direktes Kind bekommen Elemente (tr) von <tbody> von table1. Mein Code ist:

$('tr', tb1) 

Anscheinend es alle <tr> Elemente in Tabelle 1 und Tabelle 2 zurück. Ich glaube, ich von

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

oder diese Art von Logik zu bekommen.

Ich weiß $('table1 > tbody > tr') kann das direkte Kind tr bekommen. Leider kann ich das nicht benutzen.

Hat jemand eine gute Idee?

Danke.

Antwort

136

Sie können find() verwenden:

tbl.find("> tbody > tr")

+1

das ist brilliante Idee. $ ('> tbody> tr', tb1) funktioniert auch für mich. Vielen Dank. –

+0

Das ist wunderbar, ich wusste nicht, dass Sie den direkten Kind-Selektor ('>') verwenden könnten, ohne etwas davor zu spezifizieren. Vielen Dank. – silkfire

+2

Beachten Sie, dass für direkte Kinder, die nur eine Stufe tiefer sind, einfach 'Kinder ([Selektor])' verwendet werden können. – orad

0
+2

Dies würde nur funktionieren, wenn 'tb1' ein HTML-Tag wäre, was es nicht ist; und wenn 'tr' ein direktes Kind davon wäre (was es nicht ist, ist es ein direktes Kind von' '). –

4

Das ist genau der Grund, warum man mit Satztisch vorsichtig sein sollte. Ich hoffe wirklich, dass Sie sie für Daten und nicht für das Seitenlayout verwenden.

Ein weiteres Problem, das wahrscheinlich Ihren Tag ruinieren wird, ist die Verwendung von CSS-Selektoren in geschachtelten Tabellen ... Sie haben grundsätzlich das gleiche Problem - Sie können TR-Elemente der äußeren Tabelle auch in der inneren Tabelle nicht auswählen. (Sie können das Kind nicht Selektor verwenden, da es nicht in IE6 implementiert)

Dies sollte funktionieren:

$("#table1 > tbody > tr") 

Allerdings empfehle ich, dass Sie das TBODY Element codieren, da Sie nicht auf den Browser verlassen sollte erstelle es für dich.

10

Wie @ jave.web in den Kommentaren erwähnt

durch die direkte Kinder eines Elements suchen .children() verwenden. Es wird nur die direkten Kinder durchsuchen und nicht tiefer gehen. http://api.jquery.com/children/