removeClass在jquery对象上使用api 之前是否有必要检查一个类是否存在?例如.
if($(this).hasClass("test"))
$(this).removeClass("test");
Run Code Online (Sandbox Code Playgroud)
要么
$(this).removeClass("test");
Run Code Online (Sandbox Code Playgroud)
如果没有必要,为什么呢?
Vis*_*ioN 38
使用这个:
$(this).removeClass("test");
Run Code Online (Sandbox Code Playgroud)
没有必要检查班级存在.
从jQuery源代码我们可以看到该removeClass方法使用replace方法来删除子字符串:
className = (" " + elem.className + " ").replace(rclass, " ");
for (c = 0, cl = classNames.length; c < cl; c++) {
className = className.replace(" " + classNames[c] + " ", " ");
}?
Run Code Online (Sandbox Code Playgroud)
replace如果匹配的子字符串不存在,则不会删除任何内容.
至少对于Chrome,在removeClass()之前添加hasClass()检查很有用,因为即使字符串没有更改,jQuery也会无条件地将elem.className分配给新字符串,这会导致Chrome无效并重新计算布局.
有人可能会认为这是Chrome中的一个错误,它应该检查className是否实际上已从之前的值更改.但是,也可能是浏览器必须重新计算布局,因为在html规范的某些地方编写了一些模糊的要求.
我还没有测试过Firefox.Safari Web检查器没用,因为它不会告诉您为什么布局无效/重新计算(javascript函数导致它).