未将事件绑定到li项之一
Not binding an event to one of li items
我有这个导航条代码
<ul class="left">
<li><a href="#">First</a></li>
<li class="has-dropdown">
<a href="#">Support</a>
<ul>
<li><a href="#">First Sub</a></li>
<li><a href="#">Add</a></li>
</ul>
</li>
<li><a href="#">Add</a></li>
</ul>
这个事件处理程序在js文件
$('ul.left li:not(:last-child), ul.dropdown li:not(:last-child)').click(function(e) {
e.stopPropagation();
var ul = this.parentNode;
ul.removeChild(this);
});
问题:ul中的Add。Left不绑定到单击事件处理程序(它不能根据我的要求)。但是Add在ul中。虽然我已经指定li的最后一个子元素不应该被绑定,但dropdown被绑定到click事件处理程序。因此,它删除了父li项,即'Support'。
问题是你没有一个叫做dropdown
的类,你有一个叫做has-dropdown
的类,所以ul.dropdown li:not(:last-child)
选择器根本不起作用。最重要的是,您的第一个选择器ul.left li:not(:last-child)
将覆盖您的内部列表中的所有li元素,因此您还需要将您的第一个选择器更改为类似的内容:ul.left > li:not(:last-child)
,以便仅选择li元素是第一个列表的直接后代。
如果你只改变你的js把你的选择器改成:
'ul.left > li:not(:last-child), ul.has-dropdown > li:not(:last-child)'
您需要"直系后代"操作符>
来直接在特定的<ul>
元素下指定<li>
元素。
这里的问题是选择器的这一部分:ul.left li
匹配如下:
0:<li><a href="#">First</a></li>
1:<li class="has-dropdown">
<a href="#">Support</a>
<ul>
2: <li><a href="#">First Sub</a></li>
3: <li><a href="#">Add</a></li>
</ul>
</li>
4:<li><a href="#">Add</a></li>
所以:not(:last-child)
只会杀死最后一个li (<li><a href="#">Add</a></li>
)
使用ul.left>li
,你只会得到匹配:
0:<li><a href="#">First</a></li>
1:<li class="has-dropdown">
<a href="#">Support</a>
<ul>
<li><a href="#">First Sub</a></li>
<li><a href="#">Add</a></li>
</ul>
</li>
2:<li><a href="#">Add</a></li>
你正在寻找的完整选择器是:
'ul.left > li:not(:last-child), ul.dropdown > li:not(:last-child)'
如果我是你,我可能会给add
按钮添加一个类。
<ul class="left">
<li><a href="#">First</a></li>
<li class="has-dropdown">
<a href="#">Support</a>
<ul>
<li><a href="#">First Sub</a></li>
<li class="add"><a href="#">Add</a></li>
</ul>
</li>
<li class="add"><a href="#">Add</a></li>
</ul>
jQuery $('ul.left li:not(.add)').click(function(e) {
e.stopPropagation();
var ul = this.parentNode;
ul.removeChild(this);
});
相关文章:
- jQuery复选框(在ul>li下)检查事件
- jQuery bind()-如果LI点击事件触发,则阻止HTML点击事件触发
- 只有在单击外部li时才会触发的事件
- 在具有单击事件的 li 内时停止选中两次复选框
- 如何在 LI 上触发“选择”事件,由其 ID 标识
- 在 iScroll 中复制 LI 元素上的点击事件
- 当展开点击 li 的 ul 事件时,JS JQUERY 错误不起作用
- on单击li项目上的事件,以更改文本字段
- 使用此在点击事件中查找 LI 的文本
- 未定义动态 li 标签内按钮的 onclick 事件
- 如何使用 jQuery 或 JavaScript 根据当前 URL 和 click 事件将类“active”分配给 li
- 动态创建的 li 点击事件不起作用 jQuery
- 通过 li 单击触发 href 上的单击事件
- li上的jQuery按钮在单击之前不会在输入时触发更改事件
- 我想将click事件绑定到xpages类型中的li元素
- 绑定到LI的事件也由单击子元素触发
- 如何将onclick事件追加到li类中
- 如何通过jquery可选显示LI的值->选择事件
- 在Url.Action的点击事件上更改li/a标签文本
- 未将事件绑定到li项之一