Javascript 在原型中添加或删除类之前,我是否应该检查该类?
我有一行JavaScript代码,使用prototype,每秒运行几次。根据某些变量的状态,这行代码将确保某些元素有或没有类 我的问题是,我应该盲目地添加或删除该类,还是应该先检查它?我应该有以下代码:Javascript 在原型中添加或删除类之前,我是否应该检查该类?,javascript,prototype,Javascript,Prototype,我有一行JavaScript代码,使用prototype,每秒运行几次。根据某些变量的状态,这行代码将确保某些元素有或没有类 我的问题是,我应该盲目地添加或删除该类,还是应该先检查它?我应该有以下代码: if (!element.hasClassName("overtime")) { element.addClassName("overtime"); } if (element2.hasClassName("overtime")) { element2.removeClassName("
if (!element.hasClassName("overtime")) {
element.addClassName("overtime");
}
if (element2.hasClassName("overtime")) {
element2.removeClassName("overtime");
}
或者仅仅拥有:
element.addClassName("overtime");
element2.removeClassName("overtime");
我的理由是,添加和删除可能是更昂贵的方法,即使更改发生得非常快,也可能修改DOM,导致片状或加剧内存泄漏或类似情况。使用第二种方法
通过检查原型代码,您可以看到:
- addClassName已检查是否存在
- hasClassName和removeClassName都使用一个RegExp进行搜索或替换,因此也没有任何好处
请问为什么这个函数每秒运行几次?当其中一个变量发生变化时,为什么不改变类呢?因为它实际上并不是一个发生变化的变量。这类似于if(newdate()-start\u time>too\u long){…}。我必须创建另一个状态变量,这是我想要避免的。
hasClassName: function(element, className) {
if (!(element = $(element))) return;
var elementClassName = element.className;
return (elementClassName.length > 0 && (elementClassName == className ||
new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
},
addClassName: function(element, className) {
if (!(element = $(element))) return;
if (!Element.hasClassName(element, className))
element.className += (element.className ? ' ' : '') + className;
return element;
},
removeClassName: function(element, className) {
if (!(element = $(element))) return;
element.className = element.className.replace(
new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
return element;
},