#javascript #jquery
#javascript #jquery
Вопрос:
Я хотел бы спросить, как найти элемент span с определенным классом.
HTML выглядит следующим образом:
<input type="checkbox" class="checkBox">
<span class="one">One</span>
<span class="two">Two</span>
Я пытаюсь так, но это не работает:
$(".checkbox").on('click',function() {
$(this).closest('span').find('.one').hide();
});
Комментарии:
1. Существует ли несколько элементов с одним классом? Если нет, то зачем его искать? Почему бы просто не скрыть класс one
2. Это не работает, потому что
.closest()
выполняется перемещение вверх, не в поперечном направлении (предки). (братья и сестры).
Ответ №1:
Две проблемы.
1) class="checkBox"
!= «.checkbox»
Классы зависят от регистра. Вам нужно это исправить.
2) Интервалы не являются предками флажка
Они братья и сестры. closest()
работает путем перехода вверх по дереву DOM и поиска предков. Он не ищет братьев и сестер. Вы можете использовать siblings()
, чтобы попытаться найти span.one
Ответ №2:
$(".checkBox").on('click',function() {
$(this).siblings('span').each(function(){
if($(this).hasClass('one'))
$(this).hide()
})
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="checkbox" class="checkBox">
<span class="one">One</span>
<span class="two">Two</span>
Вы можете использовать метод siblings для spans.
$(".checkbox").on('click',function() {
$(this).siblings('span').each(function(){
if($(this).hasClass('one'))
$(this).hide()
})
});
Комментарии:
1. Зачем добавлять дополнительный
hasClass
метод и условие, когда селектор может бытьspan.one
?2. если не проверить, это скроет весь диапазон
3. Нет …. если селектор siblings является
span.one
, он найдет только элементы, которые соответствуют этому. Выполнение селектора как простогоspan
приводит к добавлению дополнительных условий и вызова метода, что является логическим раздуванием, то есть немного изобретением колеса, которое родственный селектор уже может сделать для вас
Ответ №3:
Вы можете использовать .siblings()
селектор jQuery:
$("input[type='checkbox']").on('click', function() {
$(this).siblings('span.one').hide();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="checkbox" class="checkBox">
<span class="one">One</span>
<span class="two">Two</span>
Обратите внимание, однако, что ваш $(".checkbox")
неверен, поскольку ваш ввод не имеет этого класса, но имеет этот тип
Ответ №4:
closest
перемещается вверх в dom, поэтому используйте next
.
$(".checkBox").on('click', function() {
$(this).next('.one').hide();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="checkbox" class="checkBox">
<span class="one">One</span>
<span class="two">Two</span>