#jquery
#jquery
Вопрос:
У меня есть что-то вроде приведенного ниже, где я хочу, чтобы, если люди нажимали на ЛЮБОЙ из текста «Нажмите здесь«, текст [ЗНАЧОК] менял цвет. Я смог заставить Click Here 1 работать, но не 2 и 3. Пожалуйста, помогите, а также скажите мне, почему мой код не работает.
HTML
<p class="learnMore"><strong>Click here 1</strong> <span class="red"> [ ICON ]</span></p>
<ul class="expandContainer">
<li>Click here 2</li>
<li>Click here 3</li>
</ul>
JS
function learnMore(){
$('.learnMore').click(function(){
$('.learnMore span').toggleClass('green');
});
$('.expandContainer').click(function(){
$(this).closest('p').find('span').toggleClass('green');
});
}
Вот codepen
Комментарии:
1. это не так, как работает closest, как объясняется во многих повторяющихся сообщениях, подобных этому. api.jquery.com/closest
Ответ №1:
Ваш селектор был неправильным. Попробуйте, как показано в моем примере. PS: Я также изменил действие щелчка на отдельные li. Если вы хотите, чтобы действие работало сразу после щелчка по всему контейнеру ul, измените его обратно на:
$('.expandContainer').click(function(){
$(this).siblings('p').find('span').toggleClass('green');
});
РАБОЧИЙ ПРИМЕР:
$( document ).ready(function() {
learnMore();
});
function learnMore(){
$('.learnMore').click(function(){
$('.learnMore span').toggleClass('green');
});
$('.expandContainer li').click(function(){
$(this).parent('ul').siblings('p').find('span').toggleClass('green');
});
}
.red {color:red}
.green{color:green}
.learnMore {cursor:pointer}
.expandContainer {cursor:pointer; border:1px solid red}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<p class="learnMore">
<strong>Click here 1</strong>
<span class="red"> [ ICON ]</span>
</p>
<ul class="expandContainer">
<li>Click here 2</li>
<li>Click here 3</li>
</ul>
Ответ №2:
Метод jQuery .closest() ищет предков, ваш код не работает, потому что .expandContainer не находится внутри p .
Используйте это:
function learnMore(){
$('.learnMore').click(function(){
$(this).find('span').toggleClass('green');
});
$('.expandContainer').click(function(){
$('.learnMore').find('span').toggleClass('green');
});
}