Jquery运行每个嵌套的li并添加类

时间:2014-03-19 22:42:16

标签: jquery each

<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活动类不仅仅是打开课程。在打开这些帖子之前,我花了一些时间尝试自己解决这些问题,现在我需要你的帮助

4 个答案:

答案 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');
});