Poniższy kod można uruchomić bez problemu w przeglądarce Chrome, ale generuje następujący błąd w przeglądarce Internet Explorer 11.
Obiekt nie obsługuje właściwości lub metody „startedWith”
Przechowuję identyfikator elementu w zmiennej. Jaki jest 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
źródło
źródło
str.indexOf("REP") == 0
IE.Odpowiedzi:
String.prototype.startsWith
to standardowa metoda w najnowszej wersji JavaScript, ES6.Patrząc na poniższą tabelę zgodności, widzimy, że jest obsługiwana na wszystkich obecnych głównych platformach, z wyjątkiem wersji Internet Explorera.
Musisz się wdrożyć
.startsWith
. Oto wypełnienie :źródło
String.prototype.startsWith = function(search, pos) { return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; };
text.indexOf("newString")
to najlepsza metoda zamiaststartsWith
.Przykład:
źródło
indexOf
zwraca wartość, ale @Jona sprawdził, czy wartość zwracana jest równa zero (tj. ciąg znaków znajduje się na początku), co oznacza, że jest dobrym zamiennikiemstartsWith
!Jeśli tak się dzieje w aplikacji Angular 2+, możesz po prostu odkomentować ciąg znaków polyfills w polyfills.ts :
źródło
import 'core-js/es6/string';
naprawiłem to. Wielkie dzięki!Zastąp funkcję startedWith przez:
Będzie to obsługiwać wszystkie przeglądarki, w tym IE
Pozycję można ustawić na 0, aby dopasować ciąg od początku, co oznacza pozycję zerową.
źródło
Jak powiedzieli inni, startWith i endWith są częścią ES6 i nie są dostępne w IE11. Nasza firma zawsze używa biblioteki lodash jako rozwiązania polyfill dla IE11. https://lodash.com/docs/4.17.4
źródło
Chociaż post Oka działa świetnie, może być nieco nieaktualny. Odkryłem, że lodash może sobie z tym poradzić za pomocą jednej funkcji. Jeśli masz zainstalowany lodash, może to zaoszczędzić kilka linii.
Spróbuj:
. . .
źródło
Niedawno stanąłem przed problemem. Rozwiązałem za pomocą ^, który jest podobny do startwith w
jquery
. Mówić,możemy użyć
Tutaj str jest id elementu.
źródło
Postępuj zgodnie z tą metodą, jeśli pojawia się problem podczas pracy z projektami angular2 +
Szukałem rozwiązania, gdy dostałem ten błąd, i to mnie tu doprowadziło. Ale to pytanie wydaje się być konkretne, ale błąd nie jest, jest to ogólny błąd. Jest to typowy błąd dla programistów kątowych zajmujących się Internet Explorerem.
W najnowszych wersjach Angulara w plikach polyfills znajdują się skomentowane kody. Ts pokazuje wszystkie wypełnienia wymagane do płynnego działania w wersjach Internet Explorer IE09, IE10 i IE11
Odkomentuj kody i działałoby to doskonale w przeglądarkach IE
Ale możesz zauważyć spadek wydajności przeglądarek IE w porównaniu do innych :(
źródło