我希望能够为元素添加一个类,而不是替换已存在的类。
到目前为止,这是我的javascript:
function black(body) {
var item = document.getElementById(body);
if (item) {
item.className=(item.className=='normal')?'black':'normal';
}
}
这段javascript用black
替换现有的类。如果该类已为black
,则会将其更改为normal
。
我想以某种方式将上面的脚本与脚本下面的脚本结合起来,脚本添加了一个类,而不是替换所有现有的类。
var item = document.getElementById("body");
item.className = item.className + " additionalclass";
答案 0 :(得分:4)
以下是几个简单的javascript函数,可用于在纯JavaScript中操作类名。在这些函数中需要一些额外的工作来匹配整个类名,并避免在类名之前/之后有任何额外的空格:
function removeClass(elem, cls) {
var str = " " + elem.className + " ";
elem.className = str.replace(" " + cls + " ", " ").replace(/^\s+|\s+$/g, "");
}
function addClass(elem, cls) {
elem.className += (" " + cls);
}
function hasClass(elem, cls) {
var str = " " + elem.className + " ";
var testCls = " " + cls + " ";
return(str.indexOf(testCls) != -1) ;
}
function toggleClass(elem, cls) {
if (hasClass(elem, cls)) {
removeClass(elem, cls);
} else {
addClass(elem, cls);
}
}
function toggleBetweenClasses(elem, cls1, cls2) {
if (hasClass(elem, cls1)) {
removeClass(elem, cls1);
addClass(elem, cls2);
} else if (hasClass(elem, cls2)) {
removeClass(elem, cls2);
addClass(elem, cls1);
}
}
如果您想在black
和normal
类之间切换而不影响指定对象上的任何其他类,则可以执行以下操作:
function black(id) {
var obj = document.getElementById(id);
if (obj) {
toggleBetweenClasses(obj, "black", "normal");
}
}
这里的工作示例:http://jsfiddle.net/jfriend00/eR85c/
如果你想添加“黑色”类,除非已经存在“普通”,你可以这样做:
function black(id) {
var obj = document.getElementById(id);
if (obj && !hasClass(obj, "normal")) {
addClass(obj, "black");
}
}
答案 1 :(得分:0)
如果您不打算添加/删除/切换类那么多,我会考虑使用类似下面的代码(而不是像jfriend00的答案那样添加2-3个函数)。
所以这里是那些不喜欢有许多不经常使用的功能的替代方案:
function toggle(id) {
var obj = document.getElementById(id), str, len;
if (obj) {
str = " " + obj.className + " ";
len = str.length;
str = str.replace(" normal ", " ");
if (str.length != len) {
str += " black";
} else {
str = str.replace(" black ", " ");
if (str.length != len) {
str += " normal";
}
}
obj.className = str.replace(/^\s+|\s+$/g, "");
}
}
它基本上存储长度,尝试替换,检查它是否删除了类(通过比较新旧长度)然后应用必要的更改。
注意:它会完全切换类,条件是你不应该在开头同时拥有这两个类。
<强> DEMO 强>
答案 2 :(得分:0)
我不知道这是否是您想要的,因为这里的答案对我来说似乎很复杂……无论如何,我需要添加类名而不替换旧名称,所以这就是我的做法。 / p>
menu.children[i].getElementsByTagName('a')[0].**classList.add('resetAfter')**;
在这里,我使用classList.add()
将类追加到定位标记中。