Yeni versiyonları DOMTokenList spec için birden argümanlar için izin add()ve remove()yanı sıra ikinci bir argüman toggle()kuvvet durumuna.
Yazma sırasında, Chrome add()ve için birden fazla bağımsız değişkeni destekler remove(), ancak diğer tarayıcıların hiçbiri desteklemez . IE 10 ve altı, Firefox 23 ve altı, Chrome 23 ve altı ve diğer tarayıcılar için ikinci argümanı desteklemez toggle().
Destek genişleyene kadar bana gelip gelmek için aşağıdaki küçük çoklu dolguyu yazdım:
(function () {
/*global DOMTokenList */
var dummy = document.createElement('div'),
dtp = DOMTokenList.prototype,
toggle = dtp.toggle,
add = dtp.add,
rem = dtp.remove;
dummy.classList.add('class1', 'class2');
// Older versions of the HTMLElement.classList spec didn't allow multiple
// arguments, easy to test for
if (!dummy.classList.contains('class2')) {
dtp.add = function () {
Array.prototype.forEach.call(arguments, add.bind(this));
};
dtp.remove = function () {
Array.prototype.forEach.call(arguments, rem.bind(this));
};
}
// Older versions of the spec didn't have a forcedState argument for
// `toggle` either, test by checking the return value after forcing
if (!dummy.classList.toggle('class1', true)) {
dtp.toggle = function (cls, forcedState) {
if (forcedState === undefined)
return toggle.call(this, cls);
(forcedState ? add : rem).call(this, cls);
return !!forcedState;
};
}
})();
ES5 uyumluluğuna sahip modern bir tarayıcı ve DOMTokenList beklenen, ancak bu özel olarak hedeflenen birkaç ortamda kullanıyorum, bu yüzden benim için harika çalışıyor, ancak IE 8 ve daha eski tarayıcı ortamlarında çalışacak komut dosyaları için ince ayar yapılması gerekebilir. .