javascript – 不支持ES6传播语法IE
作者:互联网
我有一个下面给出的与ES6兼容的javascript代码,但IE 11不支持此功能.什么是替代代码,以便它适用于所有浏览器?
[...document.querySelectorAll('.row')]
我用这个’点击’事件处理:
Array.prototype.slice.call(document.querySelectorAll('.row'))
.forEach(function(header) {
return header.addEventListener('click', function(e) {
headerClick(e, header, header.querySelector('.exy'))
});
});
解决方法:
对于所有浏览器,您可以通过调用或应用使用Array.prototype.slice(它适用于任何类似数组的对象):
Array.prototype.slice.call(document.querySelectorAll('.row'))
关于您更新的问题:
Im using this for ‘click’ event handling:
06001
我根本不会使用querySelectorAll,我会使用事件委托.据推测,所有这些.row元素都在一个共同的容器内(当然,最终,它们都在体内,但希望有一个容器“比它更接近”).使用事件委派,您可以这样做:
>只需在容器上点击一次钩子
>发生单击时,检查它是否通过一个目标元素传递到容器
对于引用的代码,看起来像这样:
// A regex we'll reuse
var rexIsRow = /\brow\b/;
// Hook click on the container
document.querySelector("selector-for-the-container").addEventListener(
"click",
function(e) {
// See if we find a .row element in the path from target to container
var elm;
for (elm = e.target; elm !== this; elm = elm.parentNode) {
if (rexIsRow.test(elm.className)) {
// Yes we did, call `headerClick`
headerClick(e, elm, elm.querySelector('.exy'));
// And stop looking
break;
}
}
},
false
);
在modern browsers以上,您可以使用elm.classList.contains(“row”)而不是正则表达式,但遗憾的是不能在IE9或更早版本上使用.
也就是说,不是像gcampbell pointed out一样维护一个单独的代码库,而是可以在代码中使用ES6(ES2015)功能,然后使用转换器进行转换(转换它们(可以转换的,很多都是)) ES5语法. Babel是一个这样的转换器.
标签:javascript,internet-explorer-11 来源: https://codeday.me/bug/20191002/1841702.html