Versi yang lebih baru dari spesifikasi DOMTokenList memungkinkan untuk beberapa argumen untuk add()dan remove(), serta argumen kedua toggle()untuk memaksa negara.
Pada saat penulisan, Chrome mendukung banyak argumen untuk add()dan remove(), tetapi tidak ada browser lain yang mendukung. IE 10 dan lebih rendah, Firefox 23 dan lebih rendah, Chrome 23 dan lebih rendah dan browser lain tidak mendukung argumen kedua toggle().
Saya menulis polyfill kecil berikut untuk menyuruh saya sampai dukungan mengembang:
(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;
};
}
})();
Peramban modern dengan kepatuhan ES5 dan DOMTokenListdiharapkan, tetapi saya menggunakan polyfill ini di beberapa lingkungan yang ditargetkan secara spesifik, jadi ini berfungsi dengan baik bagi saya, tetapi mungkin perlu mengutak-atik skrip yang akan berjalan di lingkungan browser lama seperti IE 8 dan lebih rendah .