Neuere Versionen der DOMTokenList-Spezifikation ermöglichen mehrere Argumente für add()
und remove()
sowie ein zweites Argument toggle()
, um den Status zu erzwingen.
Zum Zeitpunkt des Schreibens unterstützt Chrome mehrere Argumente für add()
und remove()
, jedoch keiner der anderen Browser. IE 10 und niedriger, Firefox 23 und niedriger, Chrome 23 und niedriger und andere Browser unterstützen das zweite Argument nicht toggle()
.
Ich habe die folgende kleine Polyfüllung geschrieben, um mich zu überraschen, bis sich die Unterstützung erweitert:
(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;
};
}
})();
Ein moderner Browser mit ES5-Konformität DOMTokenList
wird erwartet, aber ich verwende diese Polyfüllung in mehreren speziell auf sie zugeschnittenen Umgebungen. Daher funktioniert sie hervorragend für mich, muss jedoch möglicherweise für Skripts optimiert werden, die in älteren Browserumgebungen wie IE 8 und niedriger ausgeführt werden .