В качестве упрощенного примера, у меня на странице много раз повторяется следующий блок (он генерируется динамически):
<div class="box">
<div class="something1"></div>
<div class="something2">
<a class="mylink">My link</a>
</div>
</div>
При нажатии я могу перейти к родительскому элементу ссылки с помощью:
$(".mylink").click(function() {
$(this).parents(".box").fadeOut("fast");
});
Однако ... мне нужно добраться до <div class="something1">
этого конкретного родителя.
В принципе, может ли кто-нибудь сказать мне, как обращаться к брату или сестре более высокого уровня, не имея возможности ссылаться на него напрямую? Назовем его старшим братом. Прямая ссылка на имя класса старшего брата приведет к исчезновению каждого экземпляра этого элемента на странице, что не является желаемым эффектом.
Я пытался:
parents(".box .something1") ... no luck.
parents(".box > .something1") ... no luck.
siblings() ... no luck.
Кто угодно? Спасибо.
.parent()
нет.parents()
Ответы:
Вызов
.parents(".box .something1")
вернет все родительские элементы, соответствующие селектору.box .something
. Другими словами, он вернет родительские элементы, которые.something1
находятся внутри.box
.Вам нужно получить потомков ближайшего родителя, например:
$(this).closest('.box').children('.something1')
Этот код вызывает
.closest
самый внутренний родительский элемент, соответствующий селектору, а затем вызывает.children
этот родительский элемент, чтобы найти дядю, которого вы ищете.источник
parent()
это неправильный элемент..closest(...)
более устойчивый и более читаемый.$(this).parent()
Обход дерева - это весело
$(this).parent().siblings(".something1"); $(this).parent().prev(); // if you always want the parent's previous sibling $(this).parents(".box").children(".something1");
И гораздо больше способов, вы можете найти эти документы полезны.
источник
Это найдет первого родителя с классом,
box
затем найдет первый дочерний класс с сопоставлением регулярного выраженияsomething
и получит идентификатор.$(".mylink").closest(".box").find('[class*="something"]').first().attr("id")
источник
Если я правильно понял вашу проблему,
$(this).parents('.box').children('.something1')
это то, что вы ищете?источник
Вы можете использовать
.each()
with.children()
и селектор в скобках://Grab Each Instance of Box. $(".box").each(function(i){ //For Each Instance, grab a child called .something1. Fade It Out. $(this).children(".something1").fadeOut(); });
источник