Superfish菜单显示所有子菜单

时间:2013-05-16 12:43:53

标签: jquery superfish

我有一个带有2个子菜单​​的超级鱼菜单。

ITEM1   
-SUBMENU A  -SUBMENU B
--submenu aa  --submenu bb

我正在尝试使菜单在悬停主菜单项(ITEM1)时显示两个子菜单列表 这样的事情:http://www.livestrong.org/Shop

以下是superfish js的代码:

;(function($){
$.fn.superfish = function(op){

    var sf = $.fn.superfish,
        c = sf.c,
        $arrow = $(['<span class="',c.arrowClass,'"> &#187;</span>'].join('')),
        over = function(){
            var $$ = $(this), menu = getMenu($$);
            clearTimeout(menu.sfTimer);
            $$.showSuperfishUl().siblings().hideSuperfishUl();
        },
        out = function(){
            var $$ = $(this), menu = getMenu($$), o = sf.op;
            clearTimeout(menu.sfTimer);
            menu.sfTimer=setTimeout(function(){
                o.retainPath=($.inArray($$[0],o.$path)>-1);
                $$.hideSuperfishUl();
                if (o.$path.length && $$.parents(['li.',o.hoverClass].join('')).length<1){over.call(o.$path);}
            },o.delay); 
        },
        getMenu = function($menu){
            var menu = $menu.parents(['ul.',c.menuClass,':first'].join(''))[0];
            sf.op = sf.o[menu.serial];
            return menu;
        },
        addArrow = function($a){ $a.addClass(c.anchorClass).append($arrow.clone()); };

    return this.each(function() {
        var s = this.serial = sf.o.length;
        var o = $.extend({},sf.defaults,op);
        o.$path = $('li.'+o.pathClass,this).slice(0,o.pathLevels).each(function(){
            $(this).addClass([o.hoverClass,c.bcClass].join(' '))
                .filter('li:has(ul)').removeClass(o.pathClass);
        });
        sf.o[s] = sf.op = o;

        $('li:has(ul)',this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over,out).each(function() {
            if (o.autoArrows) addArrow( $('>a:first-child',this) );
        })
        .not('.'+c.bcClass)
            .hideSuperfishUl();

        var $a = $('a',this);
        $a.each(function(i){
            var $li = $a.eq(i).parents('li');
            $a.eq(i).focus(function(){over.call($li);}).blur(function(){out.call($li);});
        });
        o.onInit.call(this);

    }).each(function() {
        var menuClasses = [c.menuClass];
        if (sf.op.dropShadows  && !($.browser.msie && $.browser.version < 7)) menuClasses.push(c.shadowClass);
        $(this).addClass(menuClasses.join(' '));
    });
};

var sf = $.fn.superfish;
sf.o = [];
sf.op = {};
sf.IE7fix = function(){
    var o = sf.op;
    if ($.browser.msie && $.browser.version > 6 && o.dropShadows && o.animation.opacity!=undefined)
        this.toggleClass(sf.c.shadowClass+'-off');
    };
sf.c = {
    bcClass     : 'sf-breadcrumb',
    menuClass   : 'sf-js-enabled',
    anchorClass : 'sf-with-ul',
    arrowClass  : 'sf-sub-indicator',
    shadowClass : 'sf-shadow'
};
sf.defaults = {
    hoverClass  : 'sfHover',
    pathClass   : 'overideThisToUse',
    pathLevels  : 1,
    delay       : 800,
    animation   : {opacity:'show'},
    speed       : 'normal',
    autoArrows  : true,
    dropShadows : true,
    disableHI   : false,        // true disables hoverIntent detection
    onInit      : function(){}, // callback functions
    onBeforeShow: function(){},
    onShow      : function(){},
    onHide      : function(){}
};
$.fn.extend({
    hideSuperfishUl : function(){
        var o = sf.op,
            not = (o.retainPath===true) ? o.$path : '';
        o.retainPath = false;
        var $ul = $(['li.',o.hoverClass].join(''),this).add(this).not(not).removeClass(o.hoverClass)
                .find('>ul').hide().css('visibility','hidden');
        o.onHide.call($ul);
        return this;
    },
    showSuperfishUl : function(){
        var o = sf.op,
            sh = sf.c.shadowClass+'-off',
            $ul = this.addClass(o.hoverClass)
                .find('>ul:hidden').css('visibility','visible');
        sf.IE7fix.call($ul);
        o.onBeforeShow.call($ul);
        $ul.animate(o.animation,o.speed,function(){ sf.IE7fix.call($ul); o.onShow.call($ul); });
        return this;
    }
});

})(jQuery);

1 个答案:

答案 0 :(得分:0)

请试一试

$("#menu-main li").hover(
  function () {
    $('.sub-menu').css({"visibility":"visible", "display":"block" });

 });