使用javascript添加类,而不是替换

dav*_*ave 5 javascript css class

我希望能够为一个元素添加一个类,而不是替换已经存在的类.

这是我到目前为止的javascript:

function black(body) {
var item = document.getElementById(body);
    if (item) {
        item.className=(item.className=='normal')?'black':'normal';
    }
}
Run Code Online (Sandbox Code Playgroud)

这段javascript替换了现有的类black.如果该类已经是,black那么它将被更改为normal.

我想以某种方式将上面的脚本与脚本下面的脚本结合起来,脚本添加了一个类,而不是替换所有现有的类.

var item = document.getElementById("body");
item.className = item.className + " additionalclass";
Run Code Online (Sandbox Code Playgroud)

jfr*_*d00 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您想在blacknormal类之间切换而不影响指定对象上的任何其他类,您可以这样做:

function black(id) {
    var obj = document.getElementById(id);
    if (obj) {
        toggleBetweenClasses(obj, "black", "normal");
    }
}
Run Code Online (Sandbox Code Playgroud)

这里的工作示例:http://jsfiddle.net/jfriend00/eR85c/

如果你想添加“black”类,除非“normal”已经存在,你可以这样做:

function black(id) {
    var obj = document.getElementById(id);
    if (obj && !hasClass(obj, "normal")) {
        addClass(obj, "black");
    }
}
Run Code Online (Sandbox Code Playgroud)