代码没有运行在IE 11中,在Chrome中运行良好

以下代码可以在Chrome中正常运行,但会在Internet Explorer 11中引发以下错误。

对象不支持属性或方法“startsWith”

我将元素的ID存储在一个variables中。 有什么问题?

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">&nbsp;</td> </tr> <tr> <td id="td1">&nbsp;</td> <td id="D1" onclick="changeClass('D1');">Doors</td> </tr> <tr> <td id="td1">&nbsp;</td> <td id="D12" onclick="changeClass('D12');">Doors</td> </tr> </table> 

String.prototype.startsWith是最新版本的JavaScript ES6中的标准方法。

查看下面的兼容性表,我们可以看到它在当前所有主要平台上都支持, 除了 Internet Explorer的版本。

 ╔═══════════════╦════════╦═════════╦═══════╦═══════════════════╦═══════╦════════╗ ║ Feature ║ Chrome ║ Firefox ║ Edge ║ Internet Explorer ║ Opera ║ Safari ║ ╠═══════════════╬════════╬═════════╬═══════╬═══════════════════╬═══════╬════════╣ ║ Basic Support ║ 41+ ║ 17+ ║ (Yes) ║ No Support ║ 28 ║ 9 ║ ╚═══════════════╩════════╩═════════╩═══════╩═══════════════════╩═══════╩════════╝ 

你需要实现.startsWith自己。 这里是polyfill :

 if (!String.prototype.startsWith) { String.prototype.startsWith = function(searchString, position) { position = position || 0; return this.indexOf(searchString, position) === position; }; } 

text.indexOf("newString")是最好的方法,而不是startsWith

例:

 var text = "Format"; if(text.indexOf("Format") == 0) { alert(text + " = Format"); } else { alert(text + " != Format"); } 

如果在Angular 2+应用程序中发生这种情况,则可以在polyfills.ts中 取消对stringpolyfills的注释

 import 'core-js/es6/string'; 

正如其他人所说的开始与结束有了ES6的一部分,而不是在IE11中可用。 我们公司总是使用lodash库作为IE11的polyfill解决scheme。 https://lodash.com/docs/4.17.4

 _.startsWith([string=''], [target], [position=0])