如何让.querySelectorAll()或.forEach()在Firefox中运行?

时间:2016-12-09 06:20:06

标签: javascript foreach

我想删除类$builder->add('ip', TextType::class, array( 'label'=> 'IP Address', 'data' => '127.0.0.1' )); 的所有元素。

这在Chrome和Safari中运行良好:

sample

以下是我在Firefox中遇到的错误:

  

TypeError:document.querySelectorAll(...)。forEach不是函数

3 个答案:

答案 0 :(得分:10)

document.querySelectorAll返回一个NodeList,它像数组一样被索引,但不是一个数组,所以你不能调用它上面的数组方法。

您可以在ES6中使用Array.from(nodeList),在ES5中使用Array.prototype.slice.call(nodeList)

 Array.from(document.querySelectorAll('selector')).forEach(el => el)

答案 1 :(得分:1)

您也可以使用polyfill(参见https://developer.mozilla.org/de/docs/Web/API/NodeList/forEach):

if (window.NodeList && !NodeList.prototype.forEach) {
    NodeList.prototype.forEach = function (callback, thisArg) {
        thisArg = thisArg || window;
        for (var i = 0; i < this.length; i++) {
            callback.call(thisArg, this[i], i, this);
        }
    };
}

这会将forEach方法添加到NodeList(如果缺少)。

答案 2 :(得分:0)

我刚刚在Firefox 71中使用var kmlUrl = "https://s3.amazonaws.com/geodera-bucket/filesds/5c2e82457cd9e62b0a453ce3-1578081436616-bushfireAlert.kmz"; var kml = new KMLLayer(kmlUrl); map.addLayer(kml); kml.on("load", function() { domStyle.set("loading", "display", "none"); }); 测试了document.querySelectorAll('.element'),并且可以正常工作。

CanIUse显示,自版本50(2016年末)以来,FF已支持它:https://caniuse.com/#search=forEach

旧版FF的市场份额为0.25%,因此.forEach应该可以安全使用。