Jquery 仅对ul中的第一级li元素执行特定操作?

Jquery 仅对ul中的第一级li元素执行特定操作?,jquery,Jquery,jQuery('ul.nav.lvl1>li')。打开(“单击”,函数(){ 警惕(“你好”); }); 您需要对内部li元素使用。否则,对内部元素的单击将传播到父元素 jQuery('ul.nav.lvl1>li')。打开(“单击”,函数(){ 警惕(“你好”); }); jQuery('ul.nav.lvl1>li')。打开(“单击”,函数(e){ e、 停止传播(); }); 这是因为您使用的选择器 当您使用选择器(如ul>l

jQuery('ul.nav.lvl1>li')。打开(“单击”,函数(){
警惕(“你好”);
});

您需要对内部
li
元素使用。否则,对内部元素的单击将传播到父元素

jQuery('ul.nav.lvl1>li')。打开(“单击”,函数(){
警惕(“你好”);
});
jQuery('ul.nav.lvl1>li')。打开(“单击”,函数(e){
e、 停止传播();
});


这是因为您使用的选择器


当您使用选择器(如
ul>li
)时,您将只针对作为ul直接子级的li,因此它不会对作为li的子级的li触发。

而不是停止事件传播(这可能会影响和抑制连接的所有其他事件侦听器),您只需检查最近的祖先
li
元素是否是事件侦听器附加到的元素

在下面的示例中,
event.target
指单击的元素,而
event.currentTarget
指事件侦听器附加到的元素

通过使用
.closest()
方法,可以确定
event.target
是否是事件侦听器最初附加到的元素:

$('ul.nav.lvl1>li')。在('click',函数(事件){
if($(event.target).closest('li')是(event.currentTarget)){
警报(“点击”);
}
});


我认为应该避免使用
.stopPropagation()
(正如我在回答中提到的),以防这些元素附加任何其他事件。