jquery无法使用next / nearest

时间:2015-04-22 10:24:46

标签: javascript jquery

我的页面上有以下HTML;

<div id="c2">
    <input type="checkbox" class="expandCollapseSection" id="my_chk">
    <span>Header</span>
    <div style="" class="contentDiv">
        <div class="oj-inputtext oj-form-control oj-component">some things</div>
    </div>
</div>

我有以下JS代码;

$(".expandCollapseSection").click(function (event) {
    if ($(this).prop("checked")) {
        $(this).next('.contentDiv').slideDown('slow');
    } else {
        $(this).next('.contentDiv').slideUp('slow');
    }
}); 

现在我的问题是$(this).next('.contentDiv')没有选择contentDiv

我甚至尝试过使用$(this).closest('.contentDiv')

但仍然没有选择。

只是添加$(".contentDiv")确实得到了div。

我在这里做错了吗?

5 个答案:

答案 0 :(得分:1)

使用siblings( ".selected" )

$(".expandCollapseSection").click(function (event) {
    if ($(this).prop("checked")) {
        $(this).siblings('.contentDiv').slideDown('slow');
    } else {
        $(this).siblings('.contentDiv').slideUp('slow');
    }
});  

Demo

答案 1 :(得分:0)

您可以尝试:

$(this).closest('div').find('.contentDiv');

&#13;
&#13;
$(".expandCollapseSection").click(function (event) {
    if ($(this).prop("checked")) {
        $(this).closest('div').find('.contentDiv').css({'color':'red'});
    } else {
        $(this).closest('div').find('.contentDiv').css({'color':'green'});
    }
}); 
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="c2">
    <input type="checkbox" class="expandCollapseSection" id="my_chk">
    <span>Header</span>
    <div style="" class="contentDiv">
        <div class="oj-inputtext oj-form-control oj-component">some things</div>
    </div>
</div>
<div id="c3">
    <input type="checkbox" class="expandCollapseSection" id="my_chk">
    <span>Header</span>
    <div style="" class="contentDiv">
        <div class="oj-inputtext oj-form-control oj-component">some things</div>
    </div>
</div>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

kapantzak的回答是正确的。

但是你可以简单地使用

$(this).parent().find('.contentDiv');

稍微高效一点,因为你不必找到最接近的div。

答案 3 :(得分:0)

试用此代码,

$(".expandCollapseSection").click(function (event) {
    if ($(this).prop("checked")) {
        $(this).closest('#c2').find('.contentDiv').slideDown('slow');
    } else {
        $(this).closest('#c2').find('.contentDiv').slideUp('slow');
    }
}); 

答案 4 :(得分:0)

您也可以使用nextAll并缩短代码,如下所示。

$(".expandCollapseSection").change(function (event) {
    var div = $(this).nextAll('.contentDiv');
    var func = this.checked ? 'slideDown' : 'slideUp';
    div[func]("slow");
});

演示@ Fiddle