jQuery-Eltern eines Elternteils

93

Ich versuche gerade, das übergeordnete Element eines übergeordneten Elements eines Elements zu finden. Ich habe einen Link angeklickt, der sich in einem befindet<td> , und ich möchte das <tr>Objekt erhalten.

Warum funktioniert "$ (this) .parent (). Parent ()" nicht? Was wird?

Vielen Dank,
Brendan

Bearbeiten: Es scheint, dass ein Fehler in meiner Syntax das Ganze abgeworfen hat. "$ (this) .parent (). parent ()" funktioniert tatsächlich, aber ich habe mich für $ (this) .closest ('tr') entschieden ", weil es die effizienteste Lösung zu sein scheint.

Blutmilch
quelle
1
Könnten Sie den Code posten, damit wir sehen können, warum Ihr übergeordneter Selektor nicht funktioniert?
TStamper

Antworten:

221

Der beste Weg wäre wahrscheinlich closest:

$(this).closest('tr');

Lesen Sie die Dokumentation :

Closest überprüft zunächst das aktuelle Element, um festzustellen, ob es mit dem angegebenen Ausdruck übereinstimmt. In diesem Fall wird nur das Element selbst zurückgegeben. Wenn es nicht übereinstimmt, wird das Dokument weiterhin übergeordnet durchlaufen, bis ein Element gefunden wird, das dem angegebenen Ausdruck entspricht. Wenn kein passendes Element gefunden wird, wird keines zurückgegeben.

Paolo Bergantino
quelle
20

Es sollte funktionieren. Sie können auch $ (this) .parents (tag) ausprobieren, wobei tag das Tag ist, das Sie suchen möchten.

Beispielsweise:

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

Findet den nächsten tr "die Kette hoch".

Philippe Leybaert
quelle
9

Das sollte funktionieren ... Sie könnten es versuchen

$(this).parents(':eq(1)');

Die .parents (Selektor) sagen, dass alle Vorfahren, die mit dem Selektor übereinstimmen, abgerufen werden

und die: Gleichung (1) sagt, finde das oneth-Element (nullindexiert, also das zweite) in der Liste

Lathan
quelle
Sie können versuchen, dies zu warnen, um sicherzustellen, dass es sich um ein HTML-Ankertag handelt. Versuchen Sie Folgendes: alert ('anchor html (' + $ (this) .html () + ')');
Lathan
6

Dieses Snippet hat in der Vergangenheit für mich gespielt:

$(this).parent().parent(); 

Schreiben Sie einen Code, damit wir sehen können, ob irgendwo ein anderes Problem vorliegt ...

Gabriel Hurley
quelle
Ich stimme dem zu. Ich kann $(this).parent().parent()ohne
Probleme
5

probiere auch

$(this).closest('div.classname').hide();
Dilip
quelle
2

Wenn Sie eine ID / Klasse für das Elternteil haben, können Sie parent () verwenden, aber das gibt Ihnen alle Eltern bis zum <body>, es sei denn, Sie filtern () oder stoppen es auf eine andere Weise

$(this).parents('.myClass');

Hoffe das hilft jemandem :)

abhilashv
quelle
1

Versuchen Sie, $ (this) .parent () in ein jQuery-Objekt wie $ ($ (this) .parent ()) zu verpacken. Ich muss dies häufig tun, um sicherzustellen, dass ich ein gültiges jquery-Objekt habe. Von dort aus sollten Sie in der Lage sein, die Eltern der Eltern zu erreichen oder vielleicht die prev () zu verwenden.

kristian nissen
quelle
8
Das ist völlig sinnlos. Alles, was Sie tun, ist Zeit zu verschwenden, indem Sie ein weiteres jQuery-Objekt erstellen ...
James
1
var getParentNode = function(elem, level) { 
    level = level || 1; 
    for (var i = 0; i < level; i++) {
        if (elem != null) {
            elem = elem.parentNode; 
        }
    }
    return elem; 
}
Alex Polo
quelle
0

.closest() Dies ist nicht immer die beste Option, insbesondere wenn Sie dasselbe Elementkonstrukt haben.

<div>
    <div>
        <div>
        </div>
    </div>
</div>

Sie können Eltern eines Elternteils machen und es ist sehr einfach:

var parent = $('.myDiv').parent();
var parentParent = $(parent).parent();
var parentParentParent = $(parentParent).parent();

etc.

Webapper
quelle