Javascript 如果元素有同级,如何执行操作

Javascript 如果元素有同级,如何执行操作,javascript,jquery,siblings,Javascript,Jquery,Siblings,我有一个无序的名单作为一个左导航与相当多的链接在它。大多数列表项都有另一个无序列表作为与其关联的子菜单。但是,一些链接没有子菜单。我想禁用具有子菜单的链接上的默认单击行为,以便可以打开子菜单设置动画。但是在没有子菜单的链接上,我需要有可点击的链接。 我要做的javascript是: $(function(){ if($("#leftNav ul:first > li > a").siblings().size() > 0){ $("#leftNav ul

我有一个无序的名单作为一个左导航与相当多的链接在它。大多数列表项都有另一个无序列表作为与其关联的子菜单。但是,一些链接没有子菜单。我想禁用具有子菜单的链接上的默认单击行为,以便可以打开子菜单设置动画。但是在没有子菜单的链接上,我需要有可点击的链接。 我要做的javascript是:

$(function(){
    if($("#leftNav ul:first > li > a").siblings().size() > 0){
        $("#leftNav ul:first > li > a").click(function(e){
            e.preventDefault();
        });
    }   
问题是,这会禁用所有链接的默认单击行为,而不仅仅是具有兄弟链接的链接。 左侧导航的html如下所示

<div id="leftNav">
    <ul>
        <li>
            <a href="#">Link 1</a>
            <ul>
                <li><a href="#">Submenu Link 1</a></li>
                <li><a href="#">Submenu Link 2</a></li>
                <li><a href="#">Submenu Link 3</a></li>
            </ul>
        </li>
        <li><a href="#">Link 2</a></li>
     </ul>
</div>


因此,需要删除链接1上的单击行为,因为它将
作为同级。链接2没有同级,因此应该将其单独放置。

一种方法是找到那些具有后代
ul
li
元素,并在该
li
中找到
a
并针对这些元素:

$('#leftNav li:has("ul")').find('a').each(
    function(){
        $(this).click(
            function(){
                alert("No clicking here");
                return false;
            });
    });


编辑以添加修订的jQuery:

$('#leftNav li:has("ul")').find('a').each(
    function(){
        $(this).click(
            function(){
                alert("No clicking here");
                return false;
            });
    });
$('#leftNav li:has("ul")').hover(
    function(){
        $(this).find('ul').slideDown();   
    },
    function(){
        $(this).find('ul').slideUp();
    });
.


$(函数(){
$(“#leftNav ul:first>li>a”)。每个(函数(a,b){
var t=$(b);
//警报(t.兄弟姐妹().大小());
如果(t.兄弟姐妹().size()>0){
t、 单击(功能(e){
e、 预防默认值();
});
}
});
});
最简单的方法:

$("#leftNav ul:first > li > a").not(":only-child").click(function(e){
        e.preventDefault();
});

我没有足够高的声誉评分来评论,但我只想说Chuck的回答对我来说非常有效(除了FIREFOX?)。在打开您单击的菜单之前,“我的菜单”还会隐藏其他打开的菜单-以下是我使用的代码:

jQuery(document).ready(function($) { 
     $('ul.menu li ul.sub-menu').hide(); //Hide children by default

     $("ul.menu:first > li > a").not(":only-child").click(function(){
            event.preventDefault();
            $(this).parent().siblings().children('ul.menu li ul.sub-menu').css('display','none');
            $(this).siblings('.sub-menu').slideToggle(800);
       });
});

您可能想快速复习一下如何格式化答案中的代码:。我想我在发布答案时没有注意到代码没有格式化。谢谢。一点也不担心=)另外,回答+1,但仍然可以点击ul链接。
jQuery(document).ready(function($) { 
     $('ul.menu li ul.sub-menu').hide(); //Hide children by default

     $("ul.menu:first > li > a").not(":only-child").click(function(){
            event.preventDefault();
            $(this).parent().siblings().children('ul.menu li ul.sub-menu').css('display','none');
            $(this).siblings('.sub-menu').slideToggle(800);
       });
});