O código a seguir pode ser executado sem problemas no Chrome, mas gera o seguinte erro no Internet Explorer 11.
O objeto não suporta a propriedade ou o método 'beginWith'
Estou armazenando a identificação do elemento em uma variável. Qual é o 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
fonte
fonte
str.indexOf("REP") == 0
IE.Respostas:
String.prototype.startsWith
é um método padrão na versão mais recente do JavaScript, ES6.Observando a tabela de compatibilidade abaixo, podemos ver que ela é suportada em todas as principais plataformas atuais, exceto nas versões do Internet Explorer.
Você precisará se implementar
.startsWith
. Aqui está o polyfill :fonte
String.prototype.startsWith = function(search, pos) { return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; };
text.indexOf("newString")
é o melhor método em vez destartsWith
.Exemplo:
fonte
indexOf
retorna valor, mas @Jona verificou que o valor retornado é zero (ou seja, a string está no início), o que significa que é um bom substituto parastartsWith
!Se isso estiver acontecendo no aplicativo Angular 2+, você pode apenas descomentar polyfills de string em polyfills.ts :
fonte
import 'core-js/es6/string';
. Muito Obrigado!Substitua a função beginWith por:
Isso suportará todos os navegadores, incluindo o IE
A posição pode ser definida como 0 para correspondência de string desde o início, significando a 0ª posição.
fonte
Como já foi dito, beginWith e endsWith fazem parte do ES6 e não estão disponíveis no IE11. Nossa empresa sempre usa a biblioteca lodash como uma solução de polyfill para o IE11. https://lodash.com/docs/4.17.4
fonte
Enquanto o post de Oka está funcionando muito bem, pode estar um pouco desatualizado. Eu descobri que lodash pode lidar com isso com uma única função. Se você tiver o lodash instalado, poderá economizar algumas linhas.
Apenas tente:
. . .
fonte
Eu também recentemente enfrentei o problema. Eu resolvi usando ^, que é semelhante ao iniciar com
jquery
. Dizer,podemos usar
Aqui, str é id do elemento.
fonte
Siga este método se houver algum problema ao trabalhar com projetos angular2 +
Eu estava procurando uma solução quando recebi esse erro, e ele me trouxe aqui. Mas esta questão parece ser específica, mas o erro não é, é um erro genérico. Este é um erro comum para desenvolvedores angulares que lidam com o Internet Explorer.
Nas versões mais recentes do Angular, existem códigos comentados no polyfills.ts mostra todos os polyfills necessários para o bom funcionamento nas versões IE09, IE10 e IE11 do Internet Explorer
Remova o comentário dos códigos e funcionaria perfeitamente nos navegadores IE
Mas você pode observar uma queda no desempenho nos navegadores IE em comparação com outros :(
fonte