首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vanilla JavaScript:有办法在一条语句中切换多个CSS类吗?

Vanilla JavaScript:有办法在一条语句中切换多个CSS类吗?
EN

Stack Overflow用户
提问于 2016-04-11 09:26:40
回答 11查看 32.3K关注 0票数 29

我使用这些JavaScript代码来更改脚本中的类:

代码语言:javascript
复制
var toggleDirection = function() {
  group.classList.toggle('left-to-right');
  group.classList.toggle('right-to-left');
}

在我的示例中,只有两个类需要更改,但也可以有多个类.

因此,有没有人知道用什么方法来写这个例子?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2016-04-11 09:44:13

以下内容应该有效;假设这些类名是在CSS中定义的,并且当前页面上的某些元素具有以下classNames:

代码语言:javascript
复制
var toggleDirection = function()
{
    var ltr, rtl, lst, cls;

    ltr = 'left-to-right';
    rtl = 'right-to-left';
    lst = [].slice.call(document.getElementsByClassName(ltr));

    lst = ((lst.length > 0) ? lst : [].slice.call(document.getElementsByClassName(rtl)));

    lst.forEach
    (
        function(node)
        {
            cls = node.getAttribute('class');

            if (cls.indexOf(ltr) > -1)
            { cls.split(ltr).join(rtl); }
            else
            { cls.split(rtl).join(ltr); }

            node.setAttribute('class', cls);
        }
    );
}
票数 0
EN

Stack Overflow用户

发布于 2016-04-11 09:32:31

不,不可能直接使用Element.classList API。查看API,您可以读到:

当只存在一个参数时,切换(字符串、强制):切换类值;即,如果类存在,则删除它,如果不存在,则添加它。当存在第二个参数时:如果第二个参数为true,则添加指定的类值,如果为false,则删除它。

参考在这里

您可能会编写自己的“实用程序”函数(在vanilla中),它可以做您想做的事情,下面是一个非常简单的演示示例,它运行在classList API之上:

代码语言:javascript
复制
var superToggle = function(element, class0, class1) {
  element.classList.toggle(class0);
  element.classList.toggle(class1);
}

你这样称呼它:

代码语言:javascript
复制
superToggle(group,'left-to-right', 'right-to-left');
票数 22
EN

Stack Overflow用户

发布于 2019-07-20 19:08:18

对于任何寻求简短答案的人,您可以使用ES6/ES6 2015中引入的rest参数在一行上这样做:

代码语言:javascript
复制
const toggleCSSclasses = (el, ...cls) => cls.map(cl => el.classList.toggle(cl))

这与@attacomsian的回答非常接近,但可以利用rest参数将返回数组的事实--不管传递给函数的参数有多少。这意味着我们可以跳过检测使用字符串还是数组的部分。

代码语言:javascript
复制
const toggleCSSclasses = (el, ...cls) => cls.map(cl => el.classList.toggle(cl));

const one = document.querySelector(".one");

one.addEventListener("click", () => {
  toggleCSSclasses(one, "class1");
});

const two = document.querySelector(".two");

two.addEventListener("click", () => {
  toggleCSSclasses(two, "class1", "class2");
});
代码语言:javascript
复制
.class1 { text-decoration: underline }
.class2 { background: steelblue }
代码语言:javascript
复制
<p class="one">Click to toggle one class</p>
<p class="two">Click to toggle two classes</p>

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36544762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档