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>
String.prototype.startsWith
est une méthode standard dans la version la plus récente de JavaScript, ES6.
En regardant le tableau de compatibilité ci-dessous, nous pouvons voir qu'il est supporté par toutes les principales plates-formes actuelles, sauf versions d'Internet Explorer.
╔═══════════════╦════════╦═════════╦═══════╦═══════════════════╦═══════╦════════╗
║ Feature ║ Chrome ║ Firefox ║ Edge ║ Internet Explorer ║ Opera ║ Safari ║
╠═══════════════╬════════╬═════════╬═══════╬═══════════════════╬═══════╬════════╣
║ Basic Support ║ 41+ ║ 17+ ║ (Yes) ║ No Support ║ 28 ║ 9 ║
╚═══════════════╩════════╩═════════╩═══════╩═══════════════════╩═══════╩════════╝
Vous devrez implémenter .startsWith
vous-même. Voici le polyfill :
if (!String.prototype.startsWith) {
String.prototype.startsWith = function(searchString, position) {
position = position || 0;
return this.indexOf(searchString, position) === position;
};
}
text.indexOf("newString")
est la meilleure méthode au lieu de startsWith
.
Exemple:
var text = "Format";
if(text.indexOf("Format") == 0) {
alert(text + " = Format");
} else {
alert(text + " != Format");
}
Si cela se produit dans l'application Angular 2+, vous pouvez simplement supprimer le commentaire string polyfills dans polyfills.ts :
import 'core-js/es6/string';
Ajouter le code ci-dessous au fichier JS a fonctionné pour moi:
if (!String.prototype.startsWith) {
String.prototype.startsWith = function(searchString, position) {
position = position || 0;
return this.indexOf(searchString, position) === position;
};
}
Comme d'autres l'ont déjà dit, startsWith 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
_.startsWith([string=''], [target], [position=0])
J'ai aussi récemment fait face au problème. J'ai résolu en utilisant ^ qui est similaire à startwith dans jquery
. Dire,
var str = array[a].id;
if (str.startsWith('REP')) {..........}
on peut utiliser
if($("[id^=str]").length){..........}
Ici, str est l'identifiant de l'élément.
Le poste d’Oka fonctionne bien, mais il est peut-être un peu désuet. Je compris que lodash peut s’y attaquer avec une seule fonction. Si vous avez installé lodash, cela peut vous faire économiser quelques lignes.
Essayez juste:
import { startsWith } from lodash;
...
if (startsWith(yourVariable, 'REP')) {
return yourVariable;
return yourVariable;
}
}
Remplace la fonction startsWith par:
yourString.indexOf(searchString, position) // where position can be set to 0
Ceci supportera tous les navigateurs, y compris IE
La position peut être définie sur 0 pour commencer la correspondance à partir du début, ce qui signifie 0e position.