在jquery对象上使用removeClass
api之前,是否有必要检查类是否存在?例如。
if($(this).hasClass("test"))
$(this).removeClass("test");
或
$(this).removeClass("test");
如果没有必要,为什么会这样?
只使用这个:
$(this).removeClass("test");
没有必要检查阶级是否存在。
从 jQuery 源代码中我们可以看到removeClass
方法使用replace
方法来删除子字符串:
className = (" " + elem.className + " ").replace(rclass, " ");
for (c = 0, cl = classNames.length; c < cl; c++) {
className = className.replace(" " + classNames[c] + " ", " ");
}
如果匹配的子字符串不存在,replace
不会删除任何内容。
至少对于 Chrome,在 removeClass() 之前添加 hasClass() 检查很有用,因为 jQuery 会无条件地将 elem.className 分配给新字符串,即使字符串没有更改,这会导致 Chrome 失效并重新计算布局。
有人可能会争辩说这是Chrome中的一个错误,它应该检查className是否实际上与以前的值发生了变化。但是,也可能是浏览器必须重新计算布局,因为一些晦涩难懂的要求写在 html 规范的深处。
我还没有测试过火狐浏览器。Safari 网页检查器毫无用处,因为它不会告诉您布局失效/重新计算的原因(是哪个 JavaScript 函数导致的)。
不,不需要检查removeClass()
。
只需使用
$(this).removeClass("test");