(我猜)HTML 可能如下所示:
<div class="some other">
在这种情况下,如果你这样做
elem.domEl.className = 'reveal';
然后你会得到
<div class="reveal">
some和other类带来的所有样式都不见了!你绝对不想这样,对吧?你也不想要重复的类名,比如
<div class="reveal reveal">
那么,以下是解决方案:
最好的方法是使用 HTML5 API classList:
elem.domEl.classList.contains('reveal') // Check whether element has a classname
elem.domEl.classList.add('reveal') // Add a classname
elem.domEl.classList.remove('reveal') // Remove a classname
elem.domEl.classList.toggle('reveal') // Toggle a classname
如果您仍想在过时的浏览器中运行代码,请尝试以下方法:
// Check whether element has a classname
function hasClass(ele, cls) {
var clsChecker = new RegExp("\\b" + cls + "\\b");
return clsChecker.test(ele.className);
}
// Add a classname
function addClass(ele, cls) {
var clsChecker = new RegExp("\\b" + cls + "\\b");
if(clsChecker.test(ele.className)) {
// ele already has the className, don't need to do anything
return;
}
ele.className += (' '+ cls);
}
// Remove a classname
function removeClass(ele, cls) {
var clsChecker = new RegExp("\\b" + cls + "\\b");
if(clsChecker.test(ele.className)) {
// ele does have the className, remove them all (in case repeated)
ele.className.split(clsChecker).join('');
}
}
// Toggle a classname
function toggleClass(ele, cls) {
var clsChecker = new RegExp("\\b" + cls + "\\b");
if(clsChecker.test(ele.className)) {
// ele does have the className, remove them all (in case repeated)
ele.className.split(clsChecker).join('');
} else {
// ele doesn't have the classname, add it
ele.className += (' '+ cls);
}
}
// Usages
hasClass(elem.domEl, 'reveal') // Check whether element has a classname
addClass(elem.domEl, 'reveal') // Add a classname
removeClass(elem.domEl, 'reveal') // Remove a classname
toggleClass(elem.domEl, 'reveal') // Toggle a classname