Я хочу проверить, имеет ли элемент с классом nav-title активный класс, если true, сдвигает вниз следующий элемент (который имеет класс.sub-nav) под элементом с классом nav-title.
В противном случае, если ни один элемент с классом nav-title не имеет активного класса, найдите первый элемент с классом.sub-nav, покажите его, поднимитесь, добавьте класс active в.nav-title
Следующий код с функциями on-click работает только с fint, это просто первый, который этого не делает. Я попытался добавить класс, активный в самом документе html, но тогда и первый элемент, и второй получают класс активен, и никакая вспомогательная навигационная система не сдвинется вниз.
$(document).ready(function() {
if ($("#nav").find("nav-title").hasClass("active")) {
$(this).next(".sub-nav").slideDown("fast");
} else {
$("#nav").find(".sub-nav:first").show().prev().addClass("active");
}
$("#nav").on("click", ".nav-title", function() {
$('.active').removeClass("active").next(".sub-nav").stop().slideUp("fast");
$(this).toggleClass("active");
$(this).next(".sub-nav").stop().slideDown("fast");
});
});
Может ли кто-нибудь помочь?
Также мой html выглядит так:
<ul id="nav">
<li class="nav-title">Title 1</li>
<ul class="sub-nav">
<li><a href="#">link 1</a></li>
<li><a href="#">link 2</a></li>
</ul>
<li class="nav-title active">Title 2</li>
<ul class="sub-nav">
<li><a href="#">link 1</a></li>
<li><a href="#">link 2</a></li>
</ul>
</ul>
Мой код может быть немного грязным, я просто изучаю jquery, когда мы говорим.
Wooops! Я сделал небольшой живой пример: http://fiddle.jshell.net/kcWA8/2/
Вы не можете использовать this
в этом контексте так, как вы думаете. this
внутри if
, а не nav. Ты тоже миришь .
перед nav-title
в вашем find
. Сделайте это вместо этого:
if ($("#nav").find(".nav-title").hasClass("active")) {
$("#nav .nav-title.active").next(".sub-nav").slideDown("fast");
}
Или:
var $active = $("#nav .nav-title.active");
if ($active.length > 0) {
$active.next(".sub-nav").slideDown("fast");
}
Я использовал ответ Джеймса Монтань, он работал отлично, похоже, я неправильно понял это (this)
и забыл точку перед моим классом.
Благодарю!
$("#nav")
несколько раз, присвойте его переменной и используйте повторно, чтобы избежать повторного запроса к dom. Аналогично тому, что я сделал во втором фрагменте кода.