javascript - 未将事件绑定(bind)到 li 项目之一

标签 javascript jquery html

我有这个导航栏代码

<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.left 中的 Add 未绑定(bind)到单击事件处理程序(并且它不能根据我的要求)。但是 ul.dropdown 中的 Add 已绑定(bind)到单击事件处理程序,尽管我已指定不应绑定(bind) li 的最后一个子级。因此,它删除了父 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)'

关于javascript - 未将事件绑定(bind)到 li 项目之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25069591/

相关文章:

javascript - 如何检测 iframe 何时已加载

javascript - 为什么 Angular 不绑定(bind)下拉列表中的值

javascript - 获取 li 有一个类且没有另一个类的索引

javascript - Mithril 模板转换器使用

javascript - 带有 html 的导航器无法使用 javascript

php - 使用 php、js 和 mysql 的导航菜单

html - 使用 HtmlAgilityPack 将 HTML 转换为字符串

javascript - 获取 div 中项目的复选框值

php - 使用 mod_rewrite 和 htaccess 进行 url 重定向的子域?

javascript - 使用javascript在页面加载时切换背景