在javascript中添加和删除对象
我很确定我有这个权利,但我尝试在javascript代码中使用两个单独的方法添加和删除 第一个是专门尝试将在javascript中添加和删除对象,javascript,Javascript,我很确定我有这个权利,但我尝试在javascript代码中使用两个单独的方法添加和删除 第一个是专门尝试将classStr添加到HTML元素对象el,属性为className。如果它已经包含classStr,那么它将被单独保留 var addClass = function addClass(el, classStr) { if(el.className !== classStr) { el.className = classStr; } }; 这一次,我试图简
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的技术。也可以使用正则表达式(仅匹配单词边界)来完成,但正则表达式的执行速度通常要慢几倍,这非常简单。