单击事件时jQuery目标最近的元素

单击事件时jQuery目标最近的元素,jquery,drop-down-menu,toggle,Jquery,Drop Down Menu,Toggle,我在网上找到了一段jQuery代码,它几乎完成了我希望它完成的任务 (function($) { $.fn.toggleMenu = function() { var menu = $(this).find('ul'); menu.hide(); $(this).click(function(e) { e.stopPropagation(); menu.toggle(); }); } }); 我可以这样触发函数: $('li.g

我在网上找到了一段jQuery代码,它几乎完成了我希望它完成的任务

(function($) {
  $.fn.toggleMenu = function() {
    var menu = $(this).find('ul');
    menu.hide();

    $(this).click(function(e) {
      e.stopPropagation();
      menu.toggle();
    });
  }
});
我可以这样触发函数:

$('li.grouped').toggleMenu();
我的问题是,当有多个下拉菜单时,当我点击一个列表项时,它们都被切换。它应该只切换我单击的li元素下的ul.下拉列表

我尝试过这样的代码:

el.click(function(e) {
  e.stopPropagation();
  menu.closest('ul.dropdown').toggle();
});
但这没什么用

HTML结构与此类似:

<div class="main-menu">
  <ul class="menu">
    <li class="grouped menu-item">
      <ul class="dropdown">...</ul>
    </li>
    <li class="grouped menu-item">
      <ul class="dropdown">...</ul>
    </li>
    <li class="menu-item">...</li>
    <li class="menu-item">...</li>
    <li class="menu-item">...</li>
    <li class="menu-item">...</li>
  </ul>
</div>

有人能告诉我如何修改我的代码,使之成为正确的ul吗


感谢

现有代码向下遍历儿童,以查找
ul
s<代码>最近的()以另一种方式向上遍历子体。如果要瞄准的
ul
始终是
li
的直接子对象,则可以使用以下方法:

$(this).children('ul');

现有代码向下遍历子级以查找
ul
s<代码>最近的()以另一种方式向上遍历子体。如果要瞄准的
ul
始终是
li
的直接子对象,则可以使用以下方法:

$(this).children('ul');

您可以获取单击元素的子元素,然后切换该子元素

$(this).click(function(e) {
    var $item = $(e.target).children();
    item.toggle();
});
进一步阅读:

您可以获取所单击元素的子元素,然后切换该子元素

$(this).click(function(e) {
    var $item = $(e.target).children();
    item.toggle();
});
进一步阅读:

您的函数在单击的元素中搜索
元素。因此,您要么需要单击正确的元素,要么需要更改您的函数。函数名确实是一个输入错误,我在代码编辑器中没有这样做(使用不同的函数名)。我不认为原始代码有问题。它应该只在您单击的
  • 下切换
    。您的函数在您单击的元素中搜索
    元素。因此,您要么需要单击正确的元素,要么需要更改您的函数。函数名确实是一个输入错误,我在代码编辑器中没有这样做(使用不同的函数名)。我不认为原始代码有问题。它应该只在您单击的
  • 下切换
    。非常简单。谢谢你的帮助!这么简单。谢谢你的帮助!谢谢你的链接,并帮助我。谢谢你的链接,谢谢你的帮助。谢谢。