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