我不再确定为什么要这样做。我在某处读到了我应该设置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');
答案 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');