removeClass
在我对 jquery 对象使用 api 之前是否有必要检查一个类是否存在?例如。
if($(this).hasClass("test"))
$(this).removeClass("test");
或者
$(this).removeClass("test");
如果没有必要,为什么会这样?
removeClass
在我对 jquery 对象使用 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");