首先,除非你一次做了幾千次,否則我很懷疑調用.removeClass('b c')
的性能會更明顯。我的一般原則是寫用以下優先權代碼依次爲:
- 正確性
- 可讀性和可維護性
- 高效/緊湊型
- 性能
我只有每花費任何開發週期如果我發現了一個合法的性能問題,並且已經對哪些代碼需要改進並且能夠衡量我是否是indee實際上改善它。
如果你有對象沒有其他類,那麼最簡單的方法是隻設置新的類名稱:
$('#element').attr('class', 'a');
如果你在對象上有其他的類名,你事先知道這些是什麼,那麼你可以這樣做:
$('#element').attr('class', 'a ' + otherClassNmes);
如果你不想承擔的其他類名任何先驗知識,那麼你就需要尋找兩者的其他類名,如果刪除它們當下。你可以看看jQuery的代碼.removeClass()
,看看它究竟做了什麼。
removeClass: function(value) {
var classes, elem, cur, clazz, j,
i = 0,
len = this.length,
proceed = arguments.length === 0 || typeof value === "string" && value;
if (jQuery.isFunction(value)) {
return this.each(function(j) {
jQuery(this).removeClass(value.call(this, j, this.className));
});
}
if (proceed) {
classes = (value || "").match(core_rnotwhite) || [];
for (; i < len; i++) {
elem = this[ i ];
// This expression is here for better compressibility (see addClass)
cur = elem.nodeType === 1 && (elem.className ?
(" " + elem.className + " ").replace(rclass, " ") :
""
);
if (cur) {
j = 0;
while ((clazz = classes[j++])) {
// Remove *all* instances
while (cur.indexOf(" " + clazz + " ") >= 0) {
cur = cur.replace(" " + clazz + " ", " ");
}
}
elem.className = value ? jQuery.trim(cur) : "";
}
}
}
return this;
},
感謝您的全面選擇,現在'.attr('class','a')'似乎正是我所期待的。 – interpolack