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