添加/删除除当前事件类之外的所有类

滴滴

所以我有点困惑为什么我正在处理的代码没有按预期工作,所以任何帮助都会很好。

所以让我解释一下我正在处理一个展开/折叠菜单,当点击 a 标签时,会添加一个类并添加 css 来实现这一点,并且该类也会从其他链接中删除。

CSS代码:

a {
max-height: 0;
overflow: hidden;
transition: 0.5s ease-in-out
}
a.clicked {
max-height: 600px;
}

html代码:

<ul>

<li><a onclick='mobileMenu(event)'>link 1</a><li>

<li><a onclick='mobileMenu(event)'>link 2</a><li>

<li><a onclick='mobileMenu(event)'>link 3</a><li>

<li><a onclick='mobileMenu(event)'>link 4</a><li>

</ul>

对于这篇文章,我保持 html 非常简单,但如果需要更详细,请告诉我。

每个链接都有一个 onclick 附加。

Javascript代码:

function mobileMenu(event) {

        event.currentTarget.classList.toggle("clicked");

        [].forEach.call(document.querySelectorAll('ul li a'), function(a){

            a.classList.remove('clicked');

        });

}

所以这段代码主要适用于你点击一个链接的地方,添加“点击”类,并从除当前链接之外的任何其他链接中删除“点击”类,这很好,因为我使用它作为一个可折叠的菜单,所以你点击另一个链接它打开它,同时关闭当前打开的任何其他链接。

我的问题是上面的 js 代码添加了我使用的是“.toggle”的点击类,但这只会添加“点击”类,但不会切换它。我希望能够切换“点击”类并将其从其他链接中删除。所以我不确定这是否是我的一个简单疏忽,但我不确定我哪里出错了以及为什么“.toggle”实际上并没有切换类。

谢谢。

丹尼尔·潘塔莱纳

您可以尝试使用 if 语句。它将始终从所有链接中删除选中的,如果没有选中 event.target,它将添加选中的类。

function mobileMenu(event) {
    
  const checked = event.currentTarget.classList.contains('clicked')
  
  [].forEach.call(document.querySelectorAll('ul li a'), function(a){
    
    a.classList.remove('clicked');
    
  });

  if (checked) return;
  
  event.currentTarget.classList.toggle("clicked");
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从当前元素之外的所有元素中删除类?

删除jquery中除一个类之外的所有类的更干净的方法是什么,如果还没有该类,也无需添加类

在 mouseleave 上删除 Javascript 中除一个类之外的所有类

从除其他两个 div 之外的所有 div 中删除类

如何从菜单中删除除实际活动元素之外的所有类?

如何从除单击元素之外的所有元素中删除类?

如何为除前四个项目之外的所有项目添加类

禁用除特定类之外的所有表单元素

我如何使用jQuery删除除特定类之外的所有div和其他DOM HTML元素

向所有元素添加/删除类

使用JavaScript将类添加到网页中除特定<div>之外的所有图像中

PHP将类添加到while循环中除第一项之外的所有项

如何对除最后一个以外的所有<li>实施添加/删除类?

如何使用当前元素添加活动类并从所有其他元素中删除

CSS选择除DIV containsig类内的所有输入之外的所有输入

删除除D之外的所有行

删除除一个以外的所有类

给除 () 之外的所有单词添加引号

如何选择除JQuery中单击元素之外的所有类?

Javascript-更改ID范围之外的所有类(除1外)

如何使用vanilla JS将类.hidden-item添加到除第一个孩子之外的所有项目

jQuery:如何从元素中删除除最后一个类以外的所有类

隐藏除当前弹出窗口之外的所有弹出窗口?

迭代除当前对象之外的所有其他对象

取除当前元素之外的所有元素

如果在特定元素之外单击,请删除具有特定类的所有元素

获取接下来 24 小时的所有事件,包括 Office365 API 中的当前事件

如何从当前日期和cmd前一天删除除特定类型之外的所有文件

删除元素的所有类