jQuery问题 - 具有相同类的不同菜单之间的冲突

Posted

技术标签:

【中文标题】jQuery问题 - 具有相同类的不同菜单之间的冲突【英文标题】:jQuery Problem - Conflict between different menu with same class 【发布时间】:2019-11-23 16:55:18 【问题描述】:

大家好,我还在学习 jQuery,但我的菜单有问题。当我单击任何具有“tm-nav-vertical”或“tm-nav-horizo​​ntal”类的菜单时,它会删除第一个菜单中的 .active 类。我不想为特定菜单创建代码,因为我想始终重复使用它(例如 .menu1 .menu2)。

我尝试使用 .siblings 之类的东西,但没能成功。

$(function () 
$('.tm-nav-vertical ul li, .tm-nav-horizontal ul li').click(function () 
    if ($(this).hasClass("tm-dropdown-button")) 
        if ($(this).hasClass("active")) 
            $(this).removeClass('active');
         else 
            $('.tm-nav-vertical > ul li.active, .tm-nav-horizontal > ul li.active, .tm-dropdown-button').removeClass('active');
            $(this).addClass('active');
        
     else 
        $('.tm-nav-vertical ul li.active, .tm-nav-horizontal ul li.active').removeClass('active');
        $(this).addClass('active');
    
););

【问题讨论】:

如果您想创建可重用的东西,请使用类、构造函数(您调用new 来创建对象的函数) 或函数。 【参考方案1】:

使用如下调用:

$('.tm-nav-vertical ul li.active, .tm-nav-horizontal ul li.active')

将从文档中的任何位置选择元素。

您要做的是先找到父菜单,然后找到要修改的元素。你可以通过调用jQuery的(甚至DOM api's)closest()方法来获取父菜单,传入菜单的类选择器。它将找到与传递的选择器匹配的最近的祖先元素。

var parentMenu = $(this).closest('.tm-nav-vertical, .tm-nav-horizontal');
parentMenu.find('ul li.active').removeClass('active');

请注意,如果您的菜单更复杂(多级、多个“.active”元素等),您需要做的不仅仅是简单的find()

【讨论】:

以上是关于jQuery问题 - 具有相同类的不同菜单之间的冲突的主要内容,如果未能解决你的问题,请参考以下文章

如何在.current 类的菜单项上停止 jQuery 效果?

在图像上具有不透明度的 jQuery 动画以相同的动画时间以不同的速度显示它们

在jquery中计算具有相同类的元素的数量

jQuery选择具有相同类的随机元素

如何使用 jQuery 选择具有特定类的下一个表行?

jquery 仅显示具有相同类的下一个 div