El siguiente código se puede ejecutar sin problemas en Chrome, pero arroja el siguiente error en Internet Explorer 11.
El objeto no es compatible con la propiedad o el método 'comienza con'
Estoy almacenando la ID del elemento en una variable. ¿Cual es el problema?
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
fuente
fuente
str.indexOf("REP") == 0
para IE en su lugar.Respuestas:
String.prototype.startsWith
es un método estándar en la versión más reciente de JavaScript, ES6.Mirando la tabla de compatibilidad a continuación, podemos ver que es compatible con todas las plataformas principales actuales, excepto las versiones de Internet Explorer.
Tendrá que implementarlo
.startsWith
usted mismo. Aquí está el polyfill :fuente
String.prototype.startsWith = function(search, pos) { return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; };
text.indexOf("newString")
Es el mejor método en lugar destartsWith
.Ejemplo:
fuente
indexOf
sí devuelve el valor, pero @Jona ha comprobado que el valor de retorno es cero (es decir, la cadena está al principio), lo que significa que es un buen reemplazo parastartsWith
!Si esto sucede en la aplicación Angular 2+, puede simplemente descomentar los polyfills de cadenas en polyfills.ts :
fuente
import 'core-js/es6/string';
arreglé. ¡Muchas gracias!Reemplace la función beginWith con:
Esto será compatible con todos los navegadores, incluido IE
La posición se puede establecer en 0 para la coincidencia de cadenas desde el inicio, lo que significa la posición 0.
fuente
Como otros han dicho, comienza con y termina con son parte de ES6 y no están disponibles en IE11. Nuestra empresa siempre usa la biblioteca lodash como una solución de polyfill para IE11. https://lodash.com/docs/4.17.4
fuente
Si bien la publicación de Oka está funcionando muy bien, podría estar un poco desactualizada. Descubrí que lodash puede abordarlo con una sola función. Si tiene instalado lodash, puede ahorrarle algunas líneas.
Sólo inténtalo:
. . .
fuente
También me enfrenté recientemente al problema. Resolví usando ^, que es similar a comenzar con in
jquery
. Decir,nosotros podemos usar
Aquí, str es id del elemento.
fuente
Siga este método si surge un problema al trabajar con proyectos de angular2 +
Estaba buscando una solución cuando recibí este error, y me trajo aquí. Pero esta pregunta parece ser específica, pero el error no lo es, es un error genérico. Este es un error común para los desarrolladores angulares que trabajan con Internet Explorer.
En las últimas versiones de Angular, hay códigos comentados en polyfills.ts muestra todos los polyfills necesarios para el correcto funcionamiento en las versiones de Internet Explorer IE09, IE10 e IE11
Descomenta los códigos y funcionaría perfectamente en los navegadores IE
Pero es posible que vea una disminución del rendimiento en los navegadores IE en comparación con otros :(
fuente