2015-04-22 3 views
0

У меня есть следующий HTML-код на моей странице;jquery не может выбрать элемент, используя следующий/ближайший

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

Я делаю что-то неправильно здесь?

+0

@dsg Нет, это не является потомком. Это брат. –

+0

yes ... это sibling – testndtv

+0

Вам нужно '$ (this) .nextAll ('. ContentDiv')' и использовать 'change' вместо' click' – lshettyl

ответ

0

Вы можете попробовать: ответ

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

$(".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'}); 
 
    } 
 
});
<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>

0

kapantzak является правильным.

Однако вы могли бы просто использовать

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

Чуть более эффективным, так как вам не нужно, чтобы найти ближайший DIV.

0

Попробуйте этот код,

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

использование siblings(".selected")

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

Demo

0

Вы также можете использовать nextAll и сократить код тоже, как показано ниже.

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

Demo @Fiddle

+0

, будет ли он работать с несколькими checkboxex, специфичными для контекста? – testndtv

+0

Уверен, если у вас есть 'checkbox' и' div', сгруппированные, например, у вас есть - '

...
'. Но, опять же, это зависит от вашего сценария. Возможно, вам придется изменить несколько вещей. – lshettyl

Смежные вопросы