javascript - 不支持 ES6 扩展语法 IE

标签 javascript internet-explorer-11

我有一个下面给出的与 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通过callapply (它适用于任何类似数组的对象):

Array.prototype.slice.call(document.querySelectorAll('.row'))

关于您更新的问题:

Im using this for 'click' event handling:

Array.prototype.slice.call(document.querySelectorAll('.row'))
    .forEach(function(header) {
      return header.addEventListener('click', function(e) {
        headerClick(e, header, header.querySelector('.exy'))
      });
    });


我不会使用 querySelectorAll为此,我会使用事件委托(delegate)。大概所有这些.row元素在一个公共(public)容器中(当然,最终它们都在 body 中,但希望有一个容器比它们“更接近”)。使用事件委托(delegate),您可以这样做:
  • Hook click一次,在容器上
  • 当点击发生时,检查它是否通过您的目标元素之一前往容器

  • 对于您引用的代码,它看起来像这样:
    // 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 - 不支持 ES6 扩展语法 IE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38696119/

    相关文章:

    javascript - IE 中的无效调用对象错误

    javascript - 将 Base64 图像文件 URI 转换为文件对象

    javascript - ASP.NET MVC 使用 AJAX 将模型传递给 Controller

    javascript - 以多种形式获取所有选定复选框的值

    css - 为什么在 IE 上滚动时固定的背景图像会移动?

    vba - 无法滚动网页的分屏

    javascript - 需要帮助 - - 表格的行列总数

    javascript - 在异步函数中执行 createStore 时未定义存储?

    javascript - 如何使用 AES-GCM 从 IE 11 加密操作的结果中解密数据

    javascript - $ (':target' ) 在 Internet Explorer 11 中返回长度 0