jQuery选择e.target的子级
我有一个jQuery代码,在我单击列表元素时切换类。 如果你点击列表区域就可以了。。。 但是,当您单击包含文本“Element1”的jQuery选择e.target的子级,jquery,html,css,drop-down-menu,target,Jquery,Html,Css,Drop Down Menu,Target,我有一个jQuery代码,在我单击列表元素时切换类。 如果你点击列表区域就可以了。。。 但是,当您单击包含文本“Element1”的span元素时,它不起作用 我想使用这个jQuery函数只对具有另一个 ul作为孩子(Element1) 我不想通过单击任何子级来关闭下拉菜单ul 元素 $(“.sidebar>ul>li”)。具有(“ul”)。单击( 职能(e){ 如果((e.target==此)){ $(this.children(“ul”).toggleClass(“toggle”); }
span
元素时,它不起作用
ul
作为孩子(Element1)ul
元素$(“.sidebar>ul>li”)。具有(“ul”)。单击(
职能(e){
如果((e.target==此)){
$(this.children(“ul”).toggleClass(“toggle”);
}
}
);代码>
.侧边栏ul li ul{
显示:无;
}
.侧边栏ul li ul.切换{
显示:块;
}
-
要素1
-
子元素1
-
元素2
使用事件而不是e.target
来获取单击的span
元素的父元素ul
。和用于防止事件在DOM树中冒泡
(".sidebar>ul>li").has("ul").click( function(e) {
$(this).children("ul").toggleClass("toggle");
})
.children("ul").click(function(e) {
e.stopPropagation();
});
使用事件而不是e.target
获取单击的span
的父ul
元素。和用于防止事件在DOM树中冒泡
(".sidebar>ul>li").has("ul").click( function(e) {
$(this).children("ul").toggleClass("toggle");
})
.children("ul").click(function(e) {
e.stopPropagation();
});
以下是实现此目标的方法:
请注意,在他的评论中,如>St2425,“根据HTML5规范,Li元素仅作为UL或OL元素内的列表项有效。< /代码>”因此,您应该考虑在<<强> >代码> UL> /代码> <强>或> <强> >代码> OL/COD> < /强>中,包覆外部<强> >代码> L> <代码> <强>元素。标签
var-sidebarItems=$(“.sidebar>li”);
sidebarItems.on('click',函数(e){
var$th=$(此),
子列表=$(this.children(“ul”);
//通过移除“打开”类折叠其他子ul
sidebarItems.not($(this)).children('ul').removeClass('open');
//检查单击的元素是否是子元素的子元素,该子元素
//打开类,如果不打开,则切换“打开”类,注意
//我们使用$(e.target)将目标转换为jQuery对象
if(!$(e.target).parents('ul').hasClass('open')){
子列表。切换类(“打开”);
}否则{
//只是为了演示
log('您单击了'+$(e.target.text());
}
});代码>
li{光标:指针;字体大小:粗体;}
li ul{显示:无;}
li ul.open{display:block;}
li ul.open li{font-weight:normal;}
要素1
- 子要素1.1
- 分要素1.2
要素2
- 次级要素2.1
- 次级要素2.2
- 次级要素2.3
要素3
- 次级要素3.1
- 次级要素3.2
以下是一种实现此目标的方法:
请注意,在他的评论中,如>St2425,“根据HTML5规范,Li元素仅作为UL或OL元素内的列表项有效。< /代码>”因此,您应该考虑在<<强> >代码> UL> /代码> <强>或> <强> >代码> OL/COD> < /强>中,包覆外部<强> >代码> L> <代码> <强>元素。标签
var-sidebarItems=$(“.sidebar>li”);
sidebarItems.on('click',函数(e){
var$th=$(此),
子列表=$(this.children(“ul”);
//通过移除“打开”类折叠其他子ul
sidebarItems.not($(this)).children('ul').removeClass('open');
//检查单击的元素是否是子元素的子元素,该子元素
//打开类,如果不打开,则切换“打开”类,注意
//我们使用$(e.target)将目标转换为jQuery对象
if(!$(e.target).parents('ul').hasClass('open')){
子列表。切换类(“打开”);
}否则{
//只是为了演示
log('您单击了'+$(e.target.text());
}
});代码>
li{光标:指针;字体大小:粗体;}
li ul{显示:无;}
li ul.open{display:block;}
li ul.open li{font-weight:normal;}
要素1
- 子要素1.1
- 分要素1.2
要素2
- 次级要素2.1
- 次级要素2.2
- 次级要素2.3
要素3
- 次级要素3.1
- 次级要素3.2
li元素的Fyi仅作为ul或ol元素内的列表项有效。1。请努力,至少提供可以实际运行的代码片段,不要抛出语法错误。2.把支票完全拿掉,这是胡说八道<代码>$(this).children(“ul”).toggleClass(“toggle”)
作为处理程序函数中的唯一一行,没有任何ifs,可以完成这项工作。它做得不好。我希望在单击li和span元素时使用此处理程序函数。如果您删除了复选框,您将通过单击任何子元素来切换类…那么您应该在问题中提供所需的最低代码,@CBroe comment对于您提供的代码是正确的。请阅读如何根据li元素创建Fyi。li元素仅作为ul或ol元素内的列表项有效。1。请努力,至少提供可以实际运行的代码片段,不要抛出语法错误。2.把支票完全拿掉,这是胡说八道<代码>$(this).children(“ul”).toggleClass(“toggle”)
作为处理程序函数中的唯一一行,没有任何ifs,可以完成这项工作。它做得不好。我希望在单击li和span元素时使用此处理程序函数。如果您删除了复选框,您将通过单击任何子元素来切换类…那么您应该在问题中提供所需的最低代码,@CBroe comment对于您提供的代码是正确的。请阅读如何创建一个