应该在 removeClass 之前有 class-jQuery



在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");

最新更新