代码没有运行在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"> </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
是最新版本的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])