我使用以下 JavaScript 代码来在我的脚本中改变类:
var toggleDirection = function() {
group.classList.toggle('left-to-right');
group.classList.toggle('right-to-left');
}
在我的例子中,只有两个类需要更改,但也可能有多个类需要更改...
因此,有人知道如何以更少的冗余方式编写示例吗?
我使用以下 JavaScript 代码来在我的脚本中改变类:
var toggleDirection = function() {
group.classList.toggle('left-to-right');
group.classList.toggle('right-to-left');
}
在我的例子中,只有两个类需要更改,但也可能有多个类需要更改...
因此,有人知道如何以更少的冗余方式编写示例吗?
Element.classList
API是不可能的。从API中可以看到:
toggle ( String [, force] ) 当只有一个参数时:切换类值;即,如果存在类,则删除它,如果不存在,则添加它。当有第二个参数时:如果第二个参数为true,则添加指定的类值,如果为false,则删除它。
参考链接。
你可能需要编写自己的“实用”功能(使用原生JS),以完成你想要的操作。下面是一个非常简单的演示性示例,它基于classList
API工作:var superToggle = function(element, class0, class1) {
element.classList.toggle(class0);
element.classList.toggle(class1);
}
而你可以这样调用它:
superToggle(group,'left-to-right', 'right-to-left');
对于任何想要简短回答的人,您可以在一行中使用ES6/ES2015引入的rest参数来完成此操作:
const toggleCSSclasses = (el, ...cls) => cls.map(cl => el.classList.toggle(cl))
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");
});
.class1 { text-decoration: underline }
.class2 { background: steelblue }
<p class="one">Click to toggle one class</p>
<p class="two">Click to toggle two classes</p>
只需使用映射数组。
例如:
['left-to-right', 'right-to-left'].map(v=> group.classList.toggle(v) )
以下是ES6版本的解决方案
const classToggle = (el, ...args) => args.map(e => el.classList.toggle(e))
const classToggle = (el, ...args) => {
args.map(e => el.classList.toggle(e))
}
.a {
color: red
}
.b {
background: black
}
.c {
border-color: yellow
}
<button onclick="classToggle(this,'a', 'c','b')" class="a b c ">Click me</button>
以下是旧版 JavaScript 代码:
var classToggle = function classToggle(el) {
for (
var _len = arguments.length,
args = new Array(_len > 1 ? _len - 1 : 0),
_key = 1;
_key < _len;
_key++
) {
args[_key - 1] = arguments[_key];
}
args.map(function (e) {
return el.classList.toggle(e);
});
};
2020年的答案在这里!
从2021年4月份开始,我发现这篇文章很有帮助。
可以使用逗号分隔的类列表,像这样:
const button = document.getElementById('button')
button.classList.add('btn', 'btn-primary', 'btn-primary--footer')
button.classList.remove('btn', 'btn-primary', 'btn-primary--footer')
或者甚至可以从类列表中使用扩展语法:
const button = document.getElementById('button')
const classes = ['btn', 'btn-primary', 'btn-primary--footer']
button.classList.add(...classes)
button.classList.remove(...classes)
const toggleClasses = (e, classes) => {
classes.forEach((className) => {
e.classList.toggle(className)
});
}
const classes = [
'hidden',
'bg-white',
]
toggleClasses(element, classes)
let superToggle = (element, class0, class1) => {
element.classList.toggle(class0);
element.classList.toggle(class1);
};
没有直接的方法,但可以创建一个帮助函数:
const toggleClass = (el, cls) => {
if (Array.isArray(cls)) {
cls.map((cl) => {
el.classList.toggle(cl);
});
} else {
el.classList.toggle(cls);
}
};
toggleClass()
即可:// single class
toggleClass(document.querySelector('body'), 'left-to-right');
//multiple classes
toggleClass(document.querySelector('body'), ['left-to-right', 'right-to-left']);
['right-to-left', 'left-to-right'].forEach(function(className){
this.classList.toggle(className);
}, myElement);
classList.toggle()
的工作方式。它确实允许有第二个参数,但那是用作第一个参数的条件,第一个参数则是要切换的类。它不允许同时切换两个类。请参见 https://developer.mozilla.org/en-US/docs/Web/API/Element/classList。 - agrm var classes = [
"red",
"blue",
"green",
"purple"
]
for (var i = 0; i < classes.length; i++){
p.classList.toggle(classes[i])
}
Element
创建自己的原型 => https://jsfiddle.net/rayon_1990/2noyz7zf/ - Rayon