Aby podać uproszczony przykład, poniższy blok powtarzał się na stronie wiele razy (jest generowany dynamicznie):
<div class="box">
<div class="something1"></div>
<div class="something2">
<a class="mylink">My link</a>
</div>
</div>
Po kliknięciu mogę dostać się do rodzica linku za pomocą:
$(".mylink").click(function() {
$(this).parents(".box").fadeOut("fast");
});
Jednak ... Muszę dostać się do <div class="something1">
tego konkretnego rodzica.
Zasadniczo, czy ktoś może mi powiedzieć, jak odnosić się do rodzeństwa wyższego poziomu bez możliwości bezpośredniego odniesienia do niego? Nazwijmy to wielkim bratem. Bezpośrednie odniesienie do nazwy klasy starszego brata spowodowałoby zanikanie każdego wystąpienia tego elementu na stronie - co nie jest pożądanym efektem.
Próbowałem:
parents(".box .something1") ... no luck.
parents(".box > .something1") ... no luck.
siblings() ... no luck.
Ktoś? Dzięki.
.parent()
nie jest.parents()
Odpowiedzi:
Wywołanie
.parents(".box .something1")
zwróci wszystkie elementy nadrzędne, które pasują do selektora.box .something
. Innymi słowy, zwróci elementy nadrzędne, które są.something1
i są wewnątrz.box
.Musisz zdobyć dzieci najbliższego rodzica, na przykład:
$(this).closest('.box').children('.something1')
Ten kod wywołuje
.closest
pobieranie najbardziej wewnętrznego rodzica pasującego do selektora, a następnie wywołuje.children
ten element nadrzędny, aby znaleźć wujka, którego szukasz.źródło
parent()
jest złym elementem..closest(...)
jest bardziej wytrzymały i bardziej czytelny.$(this).parent()
Przemierzanie drzew jest fajne
$(this).parent().siblings(".something1"); $(this).parent().prev(); // if you always want the parent's previous sibling $(this).parents(".box").children(".something1");
I wiele innych sposobów, te dokumenty mogą okazać się pomocne.
źródło
Spowoduje to odnalezienie pierwszego rodzica z klasą,
box
a następnie znalezienie pierwszej klasy potomnej z dopasowaniem wyrażeń regularnychsomething
i uzyskanie identyfikatora.$(".mylink").closest(".box").find('[class*="something"]').first().attr("id")
źródło
Jeśli dobrze zrozumiałem Twój problem,
$(this).parents('.box').children('.something1')
czy tego właśnie szukasz?źródło
Możesz użyć
.each()
with.children()
i selektora w nawiasach://Grab Each Instance of Box. $(".box").each(function(i){ //For Each Instance, grab a child called .something1. Fade It Out. $(this).children(".something1").fadeOut(); });
źródło