JQuery 添加/删除类 onClick

Posted

技术标签:

【中文标题】JQuery 添加/删除类 onClick【英文标题】:JQuery add/remove class onClick 【发布时间】:2015-04-01 12:57:43 【问题描述】:

点击时打开子菜单,下次点击时关闭——这就是我想要实现的。例如this page(“关注”链接下的子菜单)。 它打开子菜单(添加类“打开”),但不关闭。卡住了... :(

我的html

<ul id="toggle"><li>
<a href="#">Menu</a>
<ul id="dropdown" class="dropdown-menu" role="menu">
<li><a href="#">2017</a></li>
<li><a href="#">2012</a></li>
<li><a href="#">2003</a></li>
</ul>
</li>
<li><a href="#">Contact</a></li>
</ul>    

javascript

$(document).ready(function()
$('#toggle li').on('click', function()
$(this).removeClass('open').addClass('open');
);
);

http://jsfiddle.net/Gallex/32pv6xz8/7/

【问题讨论】:

目前有7个回答,都建议toggleClass,还有人吗? jQuery toggle class 的可能副本 @Vohuman 不是全部 ;-),至少不仅是 【参考方案1】:

您可以为此使用函数toggleClass()

$('#toggle li').on('click', function () 
    $(this).toggleClass('open')
);

Demo

这里有一个稍微不同的方法:

jQuery

$('#toggle li').on('click', function () 
     $(this).find('ul').slideToggle();
 );

CSS

#toggle li ul 
    list-style-type: none;
    left:0;
    position:absolute;
    display: none;

Demo 2

为了防止重定向,您必须使用.preventDefault():

 $('#toggle li:has(#dropdown)').on('click', function (event) 
    if ($(event.target).parents('#dropdown').length > 0) 
        event.stopPropagation();
     else 
        event.preventDefault();
    
    $(this).find('ul').slideToggle();
);

我不确定这是最干净还是最好的方法,但它确实有效。

如果您想保存 url 以供进一步使用(例如通过 window.location 重定向),您可以将 href 属性分配给变量:

var href = $(this).find('a').attr('href');

Demo 3

参考

.toggleClass()

.slideToggle()

【讨论】:

我非常喜欢这种“不同的方法”来解决我的问题。我会用它。 但是,我想“进一步发展”。在我手写的 html 代码中,锚标记没有 url,但通常它有:'... myhomepage.com/somecategory">Menu</a> ...' 所以,我的问题是:点击时,如果锚点有 url,如何“强制”打开子菜单不去那个 url? @Gallex 如果其中一个答案对您有所帮助,请随时接受任何 有点仓促,还不够出色。现在所有的锚都没有重定向,但我只需要这个在子菜单中有子菜单的锚 [link]jsfiddle.net/Gallex/0akdz4ow 锚,也需要重定向 是的,子菜单锚点现在可以工作,但主菜单不能jsfiddle.net/Gallex/0akdz4ow/4【参考方案2】:

请改用toggleClass

$(document).ready(function()
  $('#toggle li').on('click', function()
  $(this).toggleClass('open');
);
);

【讨论】:

【参考方案3】:

您正在寻找的是.toggleClass() 函数:

$(document).ready(function()
    $('#toggle li').on('click', function()
        $(this).toggleClass('open')('open');
    );
);

查看the corrected jsfiddle :)

你做错了,你链接了 add 和 remove 函数:

$(this).removeClass('open').addClass('open');

这将删除“open”类并(完成后)再次添加“open”类。这导致该类不会消失。

【讨论】:

【参考方案4】:
$(document).ready(function()
  $('#toggle li').on('click', function()
     $(this).toggleClass('open');
  );
);

使用 toggleClass() 函数。

Demo

【讨论】:

【参考方案5】:

在jquery中使用toggleClass()函数

$('#toggle li').on('click', function () 
    $(this).toggleClass('open')
);

Demo Here

【讨论】:

【参考方案6】:

这是因为您要删除该类然后添加它...所以它总是会被添加

$(this).removeClass('open');

关闭它。

改用这个

$(document).ready(function()
$('#toggle li').on('click', function()
$(this).toggleClass('open');
);
);

【讨论】:

【参考方案7】:

只需执行以下操作:

$(document).ready(function()
    $('#toggle li').on('click', function()
         $(this).toggleClass('open');
    );
);

jsfiddle

【讨论】:

以上是关于JQuery 添加/删除类 onClick的主要内容,如果未能解决你的问题,请参考以下文章

javascript jQuery添加类,延迟,删除类

使用 jQuery 按顺序添加和删除类

JQuery 添加/删除类 onClick

jquery添加删除类onclick

JavaScript / jQuery - 在添加和删除类与下一个函数之间添加延迟[重复]

JQuery 从存储在变量中的对象中删除和添加类