#javascript #jquery
#javascript #jquery
Вопрос:
У меня есть элемент, последний, у которого есть класс step-active. Теперь я хочу написать метод, который ищет элемент, у которого есть этот класс, затем удалите этот класс и добавьте его к предыдущему. Затем я вызываю этот метод, если нажата кнопка.
У меня есть следующий фрагмент HTML-кода:
<div class="col-lg-6 col-md-6 step-panel" style="padding-right: 0">
<div class="step container-fluid">
<p>4</p>
</div>
<div class="step">
<p>3</p>
</div>
<div class="step">
<p>2</p>
</div>
<div class="step step-active">
<p>1</p>
</div>
</div>
Это мой js:
function indicateStep() {
$('.step').find().hasClass('step-active');
$(this).removeClass('step-active');
$(this).prev().addClass('step-active');
}
Я не могу заставить его работать, кто-нибудь может сказать мне, почему и предложить какое-либо решение?
Комментарии:
1.
$('.step-panel').find('.step-active')...
2. Как насчет чего-то подобного
var elem = $(".step-panel").find(".step-active");
?3. Уже есть несколько ответов о том, как это сделать — причина, по которой то, что у вас не работает, заключается в том, что вы ищете div с class
step
, а затем просматриваете его дочерние элементы сfind
помощью for one with classstep-active
, который, очевидно, не будет найден
Ответ №1:
Я думаю, это должно сработать
function indicateStep() {
$('.step.step-active')
.removeClass('step-active')
.prev()
.addClass('step-active');
}
Ответ №2:
Что-то вроде этого должно сработать:
function indicateStep() {
$('.step-active').removeClass('step-active')
.prev('.step').addClass('step-active');
}
По сути, это находит текущий step-active
элемент, удаляет step-active
класс, переходит к предыдущему .step
элементу и добавляет к нему класс.
Одна из причин, по которой ваш код не работал, заключалась в том, что вы не сохраняли $('.step').find().hasClass('step-active');
в переменную. $(this)
это не тот элемент, который вам нужен.
Комментарии:
1. Большое спасибо, это действительно решило проблему. Я не был уверен, какой из них я должен перехватить, .step-panel или .step.
2. Я использовал
$('.step-active')
, потому что это именно тот элемент, который вы хотите изменить.3. Мне интересно, как я могу найти элемент, который имеет определенный класс. Я подумал, что в этом случае будет хорошим решением, если я смогу идентифицировать элемент с классом.
4. Это именно то, что
$('.step-active')
делает. Он выбирает элемент, который имеетstep-active
класс as. (.
Там указано, что jQuery ищет элемент со следующей строкой в его классе)
Ответ №3:
Я предполагаю, что вы вызываете indicateStep
результат нажатия кнопки.
Проблема заключается в
$('.step').find().hasClass('step-active');
строка и тот факт, что вы не используете результат попытки ее найти.
Вот подробная версия для ясности:
function indicateStep() {
// Find the active step and remember that element
var step = $(".step.step-active");
// Remove the class from it
step.removeClass("step-active");
// Add it to the previous one instead
step.prev().addClass("step-active");
}
И однострочная версия:
function indicateStep() {
$(".step.step-active").removeClass("step-active").prev().addClass("step-active");
}
Комментарии:
1. Однострочная версия выглядит для меня более привлекательной 🙂
2. @photoscene: Да, я просто включил подробную версию для ясности. 🙂