在javascript中添加和删除对象

在javascript中添加和删除对象,javascript,Javascript,我很确定我有这个权利,但我尝试在javascript代码中使用两个单独的方法添加和删除 第一个是专门尝试将classStr添加到HTML元素对象el,属性为className。如果它已经包含classStr,那么它将被单独保留 var addClass = function addClass(el, classStr) { if(el.className !== classStr) { el.className = classStr; } }; 这一次,我试图简

我很确定我有这个权利,但我尝试在javascript代码中使用两个单独的方法添加和删除

第一个是专门尝试将
classStr
添加到HTML元素对象
el
,属性为
className
。如果它已经包含
classStr
,那么它将被单独保留

var addClass = function addClass(el, classStr) {
    if(el.className !== classStr) {
        el.className = classStr;
    }
};
这一次,我试图简单地从
className
中删除
classStr
,而不留下任何空格
el
是一个元素对象。我唯一不确定的是,我是否留下了空白

var removeClasfunction = function removeClass(el, classStr) {
    delete el.className;
};

函数的主要缺点是它们不能处理对象上的多个类名。此外,您并不想删除属性名,只要在没有类名的情况下将其设置为空字符串即可

下面是一组用于管理类名的实用函数,当一个对象上有多个类名时,这些函数会起作用,而这是您应该计划的(您不需要)。它们不会累积任何额外的空白:

function addClass(elem, cls) {
    if (!hasClass(elem, cls)) {
        var oldCls = elem.className;
        if (oldCls) {
            oldCls += " ";
        }
        elem.className = oldCls + cls;
    }
}

function removeClass(elem, cls) {
    var str = " " + elem.className + " ";
    elem.className = str.replace(" " + cls + " ", " ").replace(/^\s+|\s+$/g, "");
}

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);
    }
}

非常感谢。我真的不明白为什么在分配变量时要加上所有这些额外的空格。@TheCrownedPixel-这样你就可以强制进行整词匹配,这样你就永远不会匹配其他类名的中间部分。这是一种借用jQuery的技术。也可以使用正则表达式(仅匹配单词边界)来完成,但正则表达式的执行速度通常要慢几倍,这非常简单。