jQuery最接近的类选择器

时间:2013-04-17 03:55:30

标签: javascript 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();
});

我想为fadeIn和fadeOut选择最接近的level3,但不起作用。我的语法错了吗?在线示例:http://jsfiddle.net/meEUZ/

6 个答案:

答案 0 :(得分:28)

尝试遍历DOM元素祖先的.next()而不是.closest()

Working Demo

此外,您应该使用$(this)而不是$('.Level2'),否则它会选择所有.Level2而不是点击的。{/ p>

你也可以选择这样的事情 - $(this).closest('.wrap').find('.Level3').fadeToggle();

干杯!

答案 1 :(得分:14)

jQuery的.closest()方法不会选择兄弟选择器,而是父母。看起来您正在寻找.siblings()方法。

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

答案 2 :(得分:7)

最接近dom树。它找不到兄弟姐妹的东西。你可以在父母身上使用find来实现这个目标

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

答案 3 :(得分:2)

是的,在Jquery中有很多方法可以找到最接近的 DOM 元素

&#13;
&#13;
$('.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();
});
&#13;
.level{background:Red;width:200px;height:40px;}
.Level3{background:blue;width:300px;height:50px;}
&#13;
<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>
&#13;
&#13;
&#13;

答案 4 :(得分:0)

是的! closest从您传递给它的选择器开始DOM搜索,并向上移动DOM层次结构,搜索父项/祖先。请改用siblingsnext。 像这样:

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

答案 5 :(得分:0)

从以下代码中获得清晰的思路:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
    $(document).ready(function () {
        $(".add").on("click", function () {
            var v = $(this).closest(".division").find("input[name='roll']").val();
            alert(v);
        });
    });
</script>
<?php

for ($i = 1; $i <= 5; $i++) {
    echo'<div class = "division">'
        . '<form method="POST" action="">'
        . '<p><input type="number" name="roll" placeholder="Enter Roll"></p>'
        . '<p><input type="button" class="add" name = "submit" value = "Click"></p>'
        . '</form></div>';
}
?>