Ich verwende den folgenden Code, aber er schlägt im IE fehl. Die Nachricht lautet:
Wert der Eigenschaft 'add' kann nicht abgerufen werden: Objekt ist null oder undefiniert "
Ich gehe davon aus, dass dies nur ein IE-Support-Problem ist. Wie würden Sie den folgenden Code in IE funktionieren lassen?
Irgendwelche Ideen?
var img = new Image();
img.src = '/image/file.png';
img.title = 'this is a title';
img.classList.add("profilePic");
var div = document.createElement("div");
div.classList.add("picWindow");
div.appendChild(img);
content.appendChild(div);
javascript
internet-explorer
Wesley
quelle
quelle
classList
einige Polyfills für geschrieben .querySelector
sollte seinclassList
. Zweitens.remove
enthält die Methode ein unnötiges RegExp, dessen Verwendung - wie Sie bestätigt haben - einen Fehler verursacht. Da Sie bereits Leerzeichen vor und nach dem Suffix haben, ist ein einfaches.replace(' ' + className + ' ', ' ')
ausreichend (außerdem ist die Bemerkung "Ein gültiger Klassenname sollte keine regulären Regex-Zeichen enthalten." Falsch, siehe Spezifikation (gilt auch für HTML4))Antworten:
Die
classList
Eigenschaft wird von IE9 und niedriger nicht unterstützt. IE10 + unterstützt es jedoch.Verwenden Sie
className += " .."
stattdessen. Hinweis: Lassen Sie das Leerzeichen nicht aus: Klassennamen sollten in eine durch Leerzeichen getrennte Liste eingefügt werden.quelle
className
Attribut ist immer vorhanden. Es wird an einer leeren Zeichenfolge initialisiert. Zur einfacheren Pflege des Codes+=
wird empfohlen, Klassennamen hinzuzufügen.className
Eigenschaft eines DOM-Elements ist Lese- / Schreibzugriff.Wie von othes erwähnt,
classList
wird es von IE9 und älter nicht unterstützt. Neben der obigen Alternative von Alex gibt es einige Polyfills, die als Ersatz dienen sollen, dh nur diese in Ihre Seite aufnehmen und der IE sollte einfach funktionieren (berühmte letzte Wörter!).https://github.com/eligrey/classList.js/blob/master/classList.js
https://gist.github.com/devongovett/1381839
quelle
quelle
ele.getAttribute('class')
in einigen Fällen die Rückgabe null (möglicherweise, wenn das Klassenattribut noch nicht festgelegt ist?) - eine einfache if-Anweisung löste es.Schau dir das an
und classList wird funktionieren!
das ist alles!
quelle
In IE 10 und 11 ist die classList-Eigenschaft in HTMLElement.prototype definiert.
Damit es auf SVG-Elementen funktioniert, sollte die Eigenschaft in Element.prototype definiert werden, wie es in anderen Browsern der Fall war.
Ein sehr kleiner Fix wäre das Kopieren des genauen propertyDescriptor von HTMLElement.prototype nach Element.prototype:
Element.prototype.classList = HTMLElement.prototype.classList
wird werfenInvalid calling object
Verwenden Sie für IE 8 und 9 den folgenden Code. Ich habe auch eine (minimierte) Polyfüllung für Array.prototype.indexOf eingefügt, da IE 8 diese nicht nativ unterstützt (Polyfill-Quelle: Array.prototype.indexOf)
quelle
)
.In Explorer 11 funktioniert classList.add nur mit einzelnen Werten.
In diesem Fall fügt der Explorer nur die erste Klasse hinzu und ignoriert die zweite. Also muss man tun:
quelle
classList
wird in IE <9 nicht unterstützt. Verwenden Sie jQuery.addClass oder eine Polyfüllung wie die unter https://developer.mozilla.org/en-US/docs/Web/API/Element/classListquelle
classList
Funktionalität schlecht nachzuahmen