JQuery: Как добраться до определенного ребенка родителя?

Чтобы дать упрощенный пример, у меня есть следующий блок, повторяемый на странице много раз (он динамически генерируется):

<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.

Кто-нибудь? Спасибо.

Ответ 1

Вызов .parents(".box .something1") возвращает все родительские элементы, соответствующие селектору .box .something. Другими словами, он вернет родительские элементы, которые .something1 и находятся внутри .box.

Вам нужно получить детей ближайшего родителя, например:

$(this).closest('.box').children('.something1')

Этот код вызывает .closest, чтобы получить самый внутренний родительский элемент, соответствующий селектору, затем вызывает .children на этом родительском элементе, чтобы найти дядю вы ищете.

Ответ 2

$(this).parent()

Обход дерева - это весело

$(this).parent().siblings(".something1");

$(this).parent().prev(); // if you always want the parent previous sibling

$(this).parents(".box").children(".something1");

И многое другое, вы можете найти эти документы полезными.

Ответ 3

Это найдет первого родителя с классом box, затем найдет первый дочерний класс с соответствием регулярному выражению something и получит идентификатор.

$(".mylink").closest(".box").find('[class*="something"]').first().attr("id")

Ответ 4

Если я правильно понял вашу проблему, $(this).parents('.box').children('.something1') Это то, что вы ищете?

Ответ 5

Вы можете использовать .each() с .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();
});