Le code suivant peut être exécuté sans problème dans Chrome, mais génère l'erreur suivante dans Internet Explorer 11.
L'objet ne prend pas en charge la propriété ou la méthode 'startsWith'
Je stocke l'ID de l'élément dans une variable. Quelle est la solution?
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
la source
la source
str.indexOf("REP") == 0
pour IE à la place.Réponses:
String.prototype.startsWith
est une méthode standard de la version la plus récente de JavaScript, ES6.En regardant le tableau de compatibilité ci-dessous, nous pouvons voir qu'il est pris en charge sur toutes les principales plates-formes actuelles, à l' exception des versions d'Internet Explorer.
Vous devrez
.startsWith
vous mettre en œuvre . Voici le polyfill :la source
String.prototype.startsWith = function(search, pos) { return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; };
text.indexOf("newString")
est la meilleure méthode au lieu destartsWith
.Exemple:
la source
indexOf
fait valeur de retour, mais @Jona a vérifié que la valeur de retour est zéro (la chaîne est au début), ce qui signifie qu'il est un bon remplacement pourstartsWith
!Si cela se produit dans l'application Angular 2+, vous pouvez simplement décommenter les polyfills de chaîne dans polyfills.ts :
la source
import 'core-js/es6/string';
corrigé. Merci beaucoup!Remplacez la fonction startsWith par:
Cela prendra en charge tous les navigateurs, y compris IE
La position peut être définie sur 0 pour la correspondance de chaîne à partir du début signifiant la position 0.
la source
Comme d'autres l'ont dit, beginWith et endsWith font partie de ES6 et ne sont pas disponibles dans IE11. Notre société utilise toujours la bibliothèque lodash comme solution polyfill pour IE11. https://lodash.com/docs/4.17.4
la source
Bien que le poste d'Oka fonctionne très bien, il est peut-être un peu obsolète. J'ai compris que lodash pouvait y faire face avec une seule fonction. Si vous avez installé lodash, cela pourrait vous faire gagner quelques lignes.
Essayez simplement:
. . .
la source
J'ai aussi récemment fait face au problème. J'ai résolu en utilisant ^ qui est similaire à startwith in
jquery
. Dire,on peut utiliser
Ici, str est l'identifiant de l'élément.
la source
Suivez cette méthode si un problème survient lorsque vous travaillez avec des projets angular2 +
Je cherchais une solution quand j'ai eu cette erreur, et cela m'a amené ici. Mais cette question semble être spécifique mais l'erreur ne l'est pas, c'est une erreur générique. Il s'agit d'une erreur courante pour les développeurs angulaires traitant d'Internet Explorer.
Dans les dernières versions Angular, il y a des codes commentés dans le polyfills.ts montre tous les polyfills requis pour le bon fonctionnement des versions d'Internet Explorer IE09, IE10 et IE11
Décommentez les codes et cela fonctionnerait parfaitement dans les navigateurs IE
Mais vous pourriez voir une baisse des performances dans les navigateurs IE par rapport aux autres :(
la source