Ближайший селектор jQuery

<div class="wrap">
    <div class="Level2">Click me</div>
    <div class="Level3">Information</div>
</div>

<div class="wrap">
    <div class="Level2">Click me</div>
    <div class="Level3">Information</div>
</div>

<div class="wrap">
    <div class="Level2">Click me</div>
    <div class="Level3">Information</div>
</div>

<div class="wrap">
    <div class="Level2">Click me</div>
    <div class="Level3">Information</div>
</div>

JQuery

$('.Level2').click(function(){
   $('.Level2').closest('.Level3').fadeToggle();
});

Я хотел выбрать ближайший уровень3 для fadeIn и fadeOut, но не работает. Является ли мой синтаксис неправильным? онлайн Пример: http://jsfiddle.net/meEUZ/

Ответ 1

Попробуйте .next() вместо .closest(), который проходит через предки элемента DOM.

Рабочая демонстрация

Также вы должны использовать $(this), а не $('.Level2') иначе он будет выбирать ВСЕ .Level2, а не щелчок.

Вы также можете найти что-то вроде этого - $(this).closest('.wrap').find('.Level3').fadeToggle();.

Ура!

Ответ 2

jQuery .closest() метод не выбирает селекторов, но родителей. Похоже, вы ищете метод .siblings().

$('.Level2').click(function(){
   $(this).siblings('.Level3').fadeToggle();
});

Ответ 3

ближайший движется вверх по дереву. он не найдет чего-то другого. вы можете использовать поиск для родителя для достижения этого

$('.Level2').click(function(){
       $(this).parent().find('.Level3').fadeToggle();
    });

Ответ 4

Да! closest запускает поиск DOM из селектора, который вы передаете ему, и идет вверх по иерархии DOM, ища через родителей/предков. Вместо этого используйте siblings или next. Вот так:

$('.Level2').click(function(){
    $(this).siblings('.Level3').fadeToggle();
});

Ответ 5

Да, в JQuery существует много методов, позволяющих найти ближайший элемент DOM

$('.Level1').click(function(){
   $(this).next('.Level3').fadeToggle();
});
$('.Level2').click(function(){
   $(this).closest('.wrap').find('.Level3').fadeToggle();

});
$('.Level4').click(function(){
    $(this).parent().find('.Level3').fadeToggle(); 
});

$('.Level5').click(function(){
    $(this).siblings('.Level3').fadeToggle();
});
.level{background:Red;width:200px;height:40px;}
.Level3{background:blue;width:300px;height:50px;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrap">
    <div class="Level1 level">Click me()sing next)</div>
    <div class="Level3">Information</div>
</div>

<div class="wrap">
    <div class="Level2 level">Click me(Using closest)</div>
    <div class="Level3">Information</div>
</div>

<div class="wrap">
    <div class="Level4 level">Click me(Usingh Parent)</div>
    <div class="Level3">Information</div>
</div>

<div class="wrap">
    <div class="Level5 level">Click me(Using Sibiling)</div>
    <div class="Level3">Information</div>
</div>