带有单独容器的jquery下拉列表

时间:2014-10-06 09:04:08

标签: jquery html drop-down-menu

我有这样的结构:

<div class="menu">
    <ul>
        <li><a href="/dropdown1">item1</a></li>
        <li><a href="/dropdown1">item2</a></li>
        <li><a href="/dropdown1">item3</a></li>
    </ul>
</div>
<div class="submenu">
    <div class="dropdown1">content1</div>
    <div class="dropdown2">content2</div>
    <div class="dropdown3">content3</div>
</div>

子菜单内容不可见,css:

.submenu div{display:none;}

使用jquery我想悬停在项目上( .menu ul li a ) 1.将属性 href 不带'/'并从.submenu显示同名 div 。 2.将类'active'添加到item( .menu ul li a

如果鼠标从此容器或菜单项中移出并删除“活动”类(如经典下拉菜单),则隐藏此 div

这个小提琴http://jsfiddle.net/jzj5wub6/

3 个答案:

答案 0 :(得分:1)

此处您是一个解决方案http://jsfiddle.net/jzj5wub6/4/

$('.menu a').on({
    mouseenter: function () {
        var link = $(this).attr('href').substring(1);
        $(this).addClass('active');
        $('.submenu').find('.' + link).show();
    },
    mouseleave: function () {
        var link = $(this).attr('href').substring(1);
        $(this).removeClass('active');
        $('.submenu div').hide();
    },
    click: function (e) {
        e.preventDefault();
    }
});

$('.submenu div').on({
    mouseenter: function () {
        var link = $(this).attr('class');
        $('.menu a[href="/'+link+'"]').addClass('active');
        $(this).show();
    },
    mouseleave: function () {        
        $('.menu a').removeClass('active');
        $('.submenu div').hide();
    }
});

答案 1 :(得分:1)

尝试

&#13;
&#13;
jQuery(function ($) {
    $('.menu a').click(function(){
        e.preventDefault();
    })
    $('.menu li').hover(function () {
        var $target = $('.'+$(this).find('a').attr('href').substring(1), '.submenu');
        clearTimeout($target.data('hoverTimer'));
        $target.stop(true, true).slideDown(500);
    }, function () {
        var $target = $('.'+$(this).find('a').attr('href').substring(1), '.submenu');
        var timer = setTimeout(function () {
            $target.stop(true, true).slideUp();
        }, 200);
        $target.data('hoverTimer', timer);
    });

    $('.submenu > div').hover(function () {
        clearTimeout($(this).data('hoverTimer'));
    }, function () {
        $(this).stop(true, true).slideUp();
    });
});
&#13;
.menu ul {
    display:block;
    width:100%;
    height:30px;
    list-style:none;
}
.menu li {
    float:left
}
.menu a {
    background:gray;
    padding:5px;
    margin-right:1px
}
.submenu div {
    display:none;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="menu">
    <ul>
        <li>
            <a href="/dropdown1">item1</a>
        </li>
        <li>
            <a href="/dropdown2">item2</a>
        </li>
        <li>
            <a href="/dropdown3">item3</a>
        </li>
    </ul>
</div>
<div class="submenu">
    <div class="dropdown1">content1</div>
    <div class="dropdown2">content2</div>
    <div class="dropdown3">content3</div>
</div>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

你也可以这样做

Js Fiddle

$('.menu a').hover(function () {
    var a = $(this).attr('href').slice(1) // taking the href value and removing /
    $('.submenu div').removeClass('active');
    $('.submenu .' + a).addClass('active')
})

$('.menu a').on('mouseleave', function(){
  $('.submenu div' ).removeClass('active');
})

修改

JS Fiddle

$('.menu a').hover(function () {
    var a = $(this).attr('href').slice(1)
    $('.submenu div').removeClass('active');
    $('.submenu .' + a).addClass('active')
})

$('.submenu div').on('mouseleave', function () {
    $('.submenu div').removeClass('active');
})