2010-05-19 2 views
35

Allgemeine:Wie wählt man den ersten Vorfahren, der mit einem Selektor übereinstimmt?

Wie kann ich die erste Anpassungs Vorfahre eines Elements in jQuery wählen?

$('.remove').click(function(){ 
    $(this).parent().parent().hide(); 
    return false; 
}); 

Dies funktioniert:

Beispiel: indem Sie auf "Entfernen", mit diesen jQuery-Code

diesen Block HTML Nehmen

<table> 
    <tbody> 
     <tr> 
      <td> 
       <a href="#" class="remove">Remove</a> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <a href="#" class="remove">Remove</a> 
      </td> 
     </tr> 
    </tbody> 
</table> 

ich eine Zeile in der Tabelle entfernen aber es ist ziemlich zerbrechlich. Wenn jemand zum Beispiel die <a> in eine <div> steckt, würde es brechen. Gibt es eine Auswahl Syntax in jQuery, die diese Logik folgt:

„Hier ist ein Element, das einige Auswahlkriterien entsprechen, jetzt finden die nächsten Vorfahren und senden Sie es“

Dank

Antwort

56

Das closest wäre:

$(this).closest('tr').hide(); 
+0

ich diese Antwort akzeptieren würde, wenn mich SO lässt. Du warst zu schnell. Dank – Zach

1

Sie können einen Selektor an das übergeordnete Argument übergeben, glaube ich.

Oder Sie können am nächsten wie von einer anderen Antwort angegeben verwenden.

$('.remove').click(function(){ 
    $(this).closest("tr").hide(); 
    return false; 
}); 
+0

Nein, "Eltern" nur die unmittelbaren Eltern und nicht alle Vorfahren. – interjay

+0

"Eltern" durchläuft eine einzelne Ebene des DOM-Baums, Sie müssten stattdessen "Eltern" verwenden. Außerdem sollte der Filterausdruck "tr: ​​first" sein (kein Leerzeichen). – karim79

+1

@karim danke, noch kein Kaffee als ich antwortete. Geändert zu reflektieren. – Gabriel

3

ich lieber mit closest als @Kobi weist darauf hin, (1), wie es die knappste Art und Weise zu sein scheint, das zu tun. nur darauf hinweisen, können Sie auch parents verwenden:

$(this).parents("tr:first") 
+0

Gute Alternative. Ich habe gerade das ': first'-Bit im Selektor entdeckt, da' eltern() '(im Gegensatz zu' nearest() ') * mehrere * Elemente zurückgibt - alle übereinstimmenden Elemente vom unmittelbaren Elternteil aufwärts. – Dunc

0

Sie verwenden jQuery 1.4 Angenommen, können Sie .parentsUntil() verwenden, die alle Vorfahren bis zu aber NICHT einschließlich des ausgewählten Vorfahren zurück.

in Ihrem Fall also würde ich mit so etwas wie diesem geht:

$('.remove').click(function(){ 
    $(this).parentsUntil("tr").parent().hide(); 
    return false; 
}); 
Verwandte Themen