jQuery rodzic rodzica


93

Obecnie próbuję znaleźć rodzica rodzica elementu. Kliknięto łącze, które znajduje się w a <td>, i chciałbym pobrać <tr>obiekt.

Dlaczego "$ (this) .parent (). Parent ()" nie zadziała? Co będzie?

Dzięki,
Brendan

Edycja: Wygląda na to, że błąd w mojej składni zrzucił całą sprawę. „$ (this) .parent (). parent ()” faktycznie działa, ale ostatecznie zdecydowałem się na $ (this) .closest ('tr') ”, ponieważ wydaje się być najbardziej wydajnym rozwiązaniem.


1
czy możesz opublikować kod, abyśmy mogli zobaczyć, dlaczego selektor nadrzędny nie działa?
TStamper

Odpowiedzi:


222

Najlepszym sposobem byłoby prawdopodobnie użycie closest:

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

Sprawdź dokumentację :

Closest działa, najpierw sprawdzając bieżący element, aby sprawdzić, czy pasuje do określonego wyrażenia, jeśli tak, po prostu zwraca sam element. Jeśli nie pasuje, będzie kontynuował przechodzenie w górę dokumentu, rodzic po rodzicu, aż zostanie znaleziony element pasujący do określonego wyrażenia. Jeśli nie zostanie znaleziony żaden pasujący element, żaden nie zostanie zwrócony.


20

Powinno działać. Możesz także spróbować $ (this) .parents (tag), gdzie tag to tag, który chcesz znaleźć.

Na przykład:

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

Znajdzie najbliższy tr „w górę łańcucha”.


9

To powinno zadziałać ... możesz spróbować

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

.Parents (selector) mówi, że pobierz wszystkich przodków, którzy pasują do selektora

a: eq (1) mówi, że znajdź oneth (indeksowany zero, czyli drugi) element na liście


Możesz spróbować zaalarmować, aby upewnić się, że jest to tag kotwicy HTML. Spróbuj: alert ('anchor html (' + $ (this) .html () + ')');
Lathan

6

Ten fragment działał dla mnie w przeszłości:

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

Prześlij nam kod, aby zobaczyć, czy gdzieś może być inny problem ...


Zgadzam się z tym. Mogę używać $(this).parent().parent()bez problemu
DrewT


2

Jeśli masz jakikolwiek identyfikator / klasę dla rodzica, możesz użyć rodziców (), ale to da ci wszystkich rodziców aż do <body>, chyba że przefiltrujesz () lub zatrzymasz w inny sposób, na przykład

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

Mam nadzieję, że to komuś pomoże :)


1

Spróbuj opakować $ (this) .parent () w obiekt jQuery, taki jak $ ($ (this) .parent ()) Często widzę potrzebę zrobienia tego, aby upewnić się, że mam prawidłowy obiekt jquery. Stamtąd powinieneś być w stanie skontaktować się z rodzicem lub być może używając prev ().


8
To jest całkowicie bezcelowe. Wszystko, co robisz, to marnowanie czasu, tworząc kolejny obiekt jQuery ...
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; 
}

0

.closest() nie zawsze jest najlepszą opcją, szczególnie gdy masz tę samą konstrukcję elementu.

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

Możesz zrobić rodzic rodzica i jest to bardzo łatwe:

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

itp.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.