为什么要设置className和class?

时间:2013-04-05 19:46:13

标签: javascript jquery

我不再确定为什么要这样做。我在某处读到了我应该设置class和className

两个为什么?为什么不只是“上课”。我只是想了解这一点,因为每一件事似乎与“阶级”一样好用。

$(e).attr('class','highlightMe');
$(e).attr('className','highlightMe');

---更新------------------------------------------- ----------------------------------

所以,如果我想先清除所有课程?可能会有更多只有一个...... 我会做这样的事情吗?

$(e).removeClass();
$(e).addClass('highlightMe');

---更新------------------------------------------- ----------------------------------

这就是我最终做的事情,似乎工作得很好......到目前为止

attr 初始化类...摆脱我可能在那里的其他类

addClass 添加更多类

我无法使用 removeClass ,因为我没有按ID引用元素

$(.base123).attr('class','base123');
$(.base123).addClass('highlightMe blinkMe');

4 个答案:

答案 0 :(得分:7)

两者都是错误的,错误的是一个强有力的词,有更多的最佳方法,例如:使用jQuery,你只需要addClass()。如果一个类已经附加到该元素,那么这将不会做任何事情,如果它不是它将添加它。要解决您的更新,调用.removeClass()(不带参数)将删除元素(或元素)上的所有类

答案 1 :(得分:2)

使用addClass方法将类设置为元素。

$(e).addClass('newClassName');

重要的是要注意,此方法不会替换类。它只是添加了类,将其附加到可能已经分配给元素的任何类

如果要添加多个类,可以用空格分隔它们。

$("#theElementID").addClass("clsActive clsPremium");

答案 2 :(得分:1)

每个人都建议使用these methods(你应该这样做),但这不能回答你的问题!

真正的答案是:当您使用jQuery的class方法时使用.attr(),使用className方法时使用.prop()或使用element.className纯JavaScript。

Javascript将类存储为$(element).attr('class')以避免关键字冲突,但使用e.className=''实际上会更改HTML属性(链接到DOM元素的className属性,因此它们保持同步)。

编辑:回答您的更新

使用$(e).attr('class','')$(e).prop('className','')$(e).removeClass()或仅{{1}}(无参数)清除元素中的类。

答案 3 :(得分:0)

.attr('class', 'foo')将清除目标元素上设置的任何其他类。如上所述,.addClass('foo')会根据建议将类添加到目标元素中,从而保留当前设置的任何其他类。

<强>然而

我认为你可能会问,这与此有关:

$('<div />', {'class' : 'bar}); vs $('<div />', {className : 'bar'});

这是同样的事情 - className与jQuery无关,它只是简单的vanilla Javascript。

所以,$(foo).attr('class', 'bar'); 简直就是

$(foo).className = 'bar';

或更多字面意思:

$(foo).setAttribute('class', 'bar');

甚至更多字面意思:

document.getElementById('foo').className = 'bar';

document.getElementById('foo').setAttribute('class', 'bar');