<ul id="demo3" class="menu_list">
<li><a href="#">Home</a></li>
<li class="open"><a href="#"><span></span>1</a>
<ul>
<li><a href="#">Product list</a></li>
<li><a href="#">Add product</a></li>
</ul>
</li>
</ul>
我需要$(window).load
循环我的所有菜单,如果是,则查找是否存在类打开然后添加活动。
我已经制作了这样的代码:
$(window).load(function() {
$('#demo3 > li').each(function(i){
if($('#demo3 > li').hasClass('open'))
{
$(this).addClass('active');
}
});
});
不幸的是,这些增加到所有li活动类不仅仅是打开课程。在打开这些帖子之前,我花了一些时间尝试自己解决这些问题,现在我需要你的帮助
答案 0 :(得分:4)
只需使用
$('#demo3 > li.open').each(function(i){
$(this).addClass('active');
});
这样您只会选择打开课程的li
答案 1 :(得分:2)
你老代码;
$(window).load(function() {
// loops thoght each li
$('#demo3 > li').each(function(i){
// for each li we loop throguh, it creates a new jQuery object of all ('#demo3 > li') - wrong!
if($('#demo3 > li').hasClass('open')) {
// then adds class to the original loop's this (which is the current li element) - corrent.
$(this).addClass('active');
}
});
});
将其更改为;
$(window).load(function() {
$('#demo3 > li').each(function(index, el){
if($(this).hasClass('open')){
$(this).addClass('active');
}
});
});
在尝试添加类时使用了$(this),但在检查它是否最初具有类时没有使用。因此,在您检查是否具有开放类的行上,您实际上是在创建一个新的jQuery对象,该对象将是#demo3 li
的数组,而不是当前的li
你正在迭代。
正如您所看到的那样,我已将2个参数添加到每个函数中。 index
是itteration的当前索引,el
是当前的html元素(不是jQuery对象)。在此示例中,您可以将$(this)
替换为$(el)
。
但总而言之,你所能做的只是选择那些具有“开放”功能的人。课程,然后只需添加“活跃的”#39;对所有人来说;
$(window).load(function() {
$('#demo3 > li.open').addClass('active');
});
答案 2 :(得分:1)
第一个答案肯定有效。我会尝试将其缩减为单个,以便在$(window).load
上调用,其中包含:
$(window).load(function () {
$('#demo3 > li.open').addClass("active");
}
说实话,这可能不是最佳选择,具体取决于您是否要做的不仅仅是将.active
类添加到指定的元素。在这种情况下,以前使用的.each
符号可能是必要的:
$(window).load(function () {
$('#demo3 > li.open').each( function(){
$(this).addClass("active");
// And do additional stuff
});
});
希望这有帮助!如果您有任何问题,请告诉我。
答案 3 :(得分:0)
使用:
$(function(){
$('#demo3 li.open').addClass('active');
});