Der folgende Code kann problemlos in Chrome ausgeführt werden, löst jedoch in Internet Explorer 11 den folgenden Fehler aus.
Das Objekt unterstützt keine Eigenschaft oder Methode 'StartsWith'.
Ich speichere die ID des Elements in einer Variablen. Was ist das Problem?
function changeClass(elId) {
var array = document.getElementsByTagName('td');
for (var a = 0; a < array.length; a++) {
var str = array[a].id;
if (str.startsWith('REP')) {
if (str == elId) {
array[a].style.backgroundColor = "Blue";
array[a].style.color = "white";
} else {
array[a].style.backgroundColor = "";
array[a].style.color = "";
}
} else if (str.startsWith('D')) {
if (str == elId) {
array[a].style.backgroundColor = "Blue";
array[a].style.color = "white";
} else {
array[a].style.backgroundColor = "";
array[a].style.color = "";
}
}
}
}
<table>
<tr>
<td id="REP1" onclick="changeClass('REP1');">REPS</td>
<td id="td1"> </td>
</tr>
<tr>
<td id="td1"> </td>
<td id="D1" onclick="changeClass('D1');">Doors</td>
</tr>
<tr>
<td id="td1"> </td>
<td id="D12" onclick="changeClass('D12');">Doors</td>
</tr>
</table>
javascript
html
Bhushan Dhamdhere
quelle
quelle
str.indexOf("REP") == 0
stattdessen für IE verwenden.Antworten:
String.prototype.startsWith
ist eine Standardmethode in der neuesten Version von JavaScript, ES6.In der folgenden Kompatibilitätstabelle sehen wir, dass sie auf allen aktuellen Hauptplattformen mit Ausnahme der Versionen von Internet Explorer unterstützt wird.
Sie müssen sich
.startsWith
selbst implementieren . Hier ist die Polyfüllung :quelle
String.prototype.startsWith = function(search, pos) { return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; };
text.indexOf("newString")
ist die beste Methode anstelle vonstartsWith
.Beispiel:
quelle
indexOf
tut Rückgabewert, aber @Jona hat überprüft , dass der Rückgabewert Null (dh am Anfang der Zeichenfolge ist), was bedeutet , es ist ein guter Ersatz fürstartsWith
!Wenn dies geschieht in Angular 2+ Anwendung können Sie nur uncomment String polyfills in polyfills.ts :
quelle
import 'core-js/es6/string';
behoben. Danke vielmals!Ersetzen Sie die Funktion startWith durch:
Dies unterstützt alle Browser einschließlich IE
Die Position kann für den String-Abgleich von Anfang an auf 0 gesetzt werden, was die 0. Position bedeutet.
quelle
Wie andere bereits gesagt haben, sind StartsWith und EndesWith Teil von ES6 und in IE11 nicht verfügbar. Unser Unternehmen verwendet die lodash-Bibliothek immer als Polyfill-Lösung für IE11. https://lodash.com/docs/4.17.4
quelle
Während der Beitrag von Oka großartig funktioniert, könnte er etwas veraltet sein. Ich fand heraus, dass lodash es mit einer einzigen Funktion angehen kann. Wenn Sie lodash installiert haben, können Sie möglicherweise einige Zeilen sparen.
Probier's einfach:
. . .
quelle
Ich habe mich auch kürzlich dem Problem gestellt. Ich habe mit ^ gelöst, was ähnlich wie bei startwith in ist
jquery
. Sagen,wir können benutzen
Hier ist str die ID des Elements.
quelle
Befolgen Sie diese Methode, wenn bei der Arbeit mit Angular2 + -Projekten Probleme auftreten
Ich habe nach einer Lösung gesucht, als ich diesen Fehler bekam, und er hat mich hierher gebracht. Aber diese Frage scheint spezifisch zu sein, aber der Fehler ist nicht, es ist ein generischer Fehler. Dies ist ein häufiger Fehler für Winkelentwickler, die mit Internet Explorer arbeiten.
In Angular neuesten Versionen gibt es in den kommentierten Codes kommen polyfills.ts zeigt alle erforderlichen polyfills für glätten die IE09, IE10 und IE11 in Internet Explorer - Versionen laufen
Kommentieren Sie die Codes aus und es würde perfekt in IE-Browsern funktionieren
In IE-Browsern kann es jedoch zu Leistungseinbußen im Vergleich zu anderen Browsern kommen :(
quelle