代码之家  ›  专栏  ›  技术社区  ›  curly_brackets

jquery:如果脚本包含,则不运行该脚本。active

  •  0
  • curly_brackets  · 技术社区  · 14 年前

    我有一个动画菜单脚本。如果菜单包含一个具有活动类(.active)的对象,我不希望这样做。我想不出来。我试过几件事,但我想我想都错了。你能帮助我吗?

    这是脚本:

    $('#navigation .toplevel, #navigation > ul > li').each(function(idx) {
        $(this).delay( idx * 600 ).fadeIn( 600 );
    });
    

    这是标记:

    <div id="navigation">
            <a href="#" class="toplevel">Menu</a>
            <ul class="undermenu"> 
                <li><a href="#">1.0 Menuitem</a>             
                    <ul> 
                        <li><a href="#" class="active">1.1 Menuitem</a></li>                     
                        <li><a href="#">1.2 Menuitem</a></li>
                    </ul> 
                </li>
                <li><a href="#">2.0 Menuitem</a>             
                    <ul> 
                        <li><a href="#">2.1 Menuitem</a></li>                     
                        <li><a href="#">2.2 Menuitem</a></li>
                    </ul> </li> 
            </ul> 
    </div>
    

    如果是保险商实验室 包含一个活动类,我希望它按默认值显示,并且li(父级)获取一个.active类。

    这有什么意义吗?



    * 编辑: *

    如果主ul包含一个具有.active类的子级(或子级),则脚本不应运行。我想这是如果/那么重要?但我不知道怎么写。

    还有…

    如果“ul li ul li “激活”ul (父母,父母,父母:d)应该被给予。积极的班级。我该怎么做?

    事先谢谢你…:)

    4 回复  |  直到 14 年前
        1
  •  1
  •   Brian Driscoll    14 年前

    首先,分配 .active 类到父级ul元素。您可以简单地更改下面的选择器来迭代您的ul元素并添加 .激活 类到其父li元素:

    $('#navigation > ul > li .active').each(function(){
         $(this).parent().addClass('active');
     });
    

    这将确保 .激活 标记已设置动画:

    $('#navigation .toplevel, #navigation > ul > li').not('.active').each(function(idx) { 
        $(this).delay( idx * 600 ).fadeIn( 600 ); 
    }); 
    
        2
  •  0
  •   SLaks    14 年前

    :not(.active) 到您的选择器。

        3
  •  0
  •   Raphael Müller    14 年前

    您可以使用jquery的:not()选择器进行尝试。

    http://api.jquery.com/not-selector/

    例如,选择li's not containing class active: $('导航ul li:非(.active)'。每个…


    编辑:

    1. 您可以添加这样的if子句:

    if($('#navigation ul .active').size() != 0)
    {
        $('#navigation .toplevel, #navigation > ul > li').each(function(idx)
        { 
           $(this).delay( idx * 600 ).fadeIn( 600 ); 
        });
    }
    

    2。

    $('ul li').has('ul li a.active').addClass('active');

    像这样的东西应该管用。

    退房: http://api.jquery.com/size/ , http://api.jquery.com/addClass/ , http://api.jquery.com/has/

        4
  •  0
  •   Bill Criswell    14 年前

    我相信这就是你想要的。

    $('#navigation .toplevel, #navigation > ul > li').each(function(idx) {
        $this = $(this);
        if( $this.find('li.active').length === 0 ) {
            $this.delay( idx * 600 ).fadeIn( 600 );
        }
    });