在没有id的<ul>列表中获取子<ul>,在<ul> <li> <a></a>的第一级获取e.preventDefault()</li> </ul> </ul> </ul>

时间:2012-11-06 13:24:44

标签: javascript jquery

我有一些菜单结构如下:

<ul id="menu">
    <li><a href="#"><span>First level link 1</span></a>
        <ul>
            <li><a href="#"><span>Child link 1</span></a></li>
            <li><a href="#"><span>Child link 2</span></a></li>
        </ul>
    </li>
    <li><a href="#"><span>First level link 2</span></a>
        <ul>
            <li><a href="#"><span>Child link 2</span></a></li>
            <li><a href="#"><span>Child link 2</span></a></li>
        </ul>
    </li>
</ul>

它只需要显示第一级别的ul li,它可以,但是它需要通过点击第二级链接来显示。而且我不能在ul或li中使用id或rel attr - 这是我抓住孩子的问题。

我的代码就像:

var menuRaw = $("ul#menu > li:lt(5)");

    menuRaw.click(function(e){
        e.preventDefault();

        var menuItem = $(this);

        menuRaw.removeClass("selected");
        menuItem.addClass("selected");

        $('#menu ul').hide();
        menuItem.find("ul").show();
    }

它有效,但是e.preventDefault()阻止了菜单中的所有链接(但是在二级链接上需要像往常一样工作链接)

对不起我的英文,这是关于stackoverflow的第一个问题。

2 个答案:

答案 0 :(得分:1)

您可以选择并处理每个级别的点击次数,如:

// first level links
$("ul#menu > li > a").click(function() {
    e.preventDefault();

    // show sub-menu etc..
}

// second level links (remove this block if you dont want any spl processing here)
$("ul#menu > li > ul > li > a").click(function() {
    return true; // behave like normal links
});

答案 1 :(得分:0)

您可以通过检查点击的li是否嵌套了ul来实现此目的。

$('#menu li').click(function(e) {

  $this = $(this);
  e.stopPropagation(); 

  if ($this.has('ul').length) {
    e.preventDefault();
    $('ul', this).fadeToggle();
  } 

});

Here's a demo