我需要将NodeList
对象转换为数组 - 在本例中是<div>
元素的列表,因为我需要使用map()
和filter()
方法改进它。
不幸的是在Firefox中(我测试了3.6和4)我正在使用的方法引发了以下错误:
Error: setting a property that only has a getter
以下代码是相关行的精简版本。
trackList = [].splice.call(videoElement.querySelectorAll("div"),0);
这在Chrome和Safari中运行良好。它似乎与querySelectAll
方法无关,因为无论如何获得NodeList
,都会出现同样的问题(例如,使用document.getElementsByTagName("div")
。)
问题似乎在于call()
方法本身 - 给定预先存在的NodeList
并引用Array.prototype.slice
方法,以下内容仍会失败:
sliceMethod.call(myNodeList,0);
毋庸置疑,我很难过 - 任何帮助或建议都会受到高度赞赏。
更新
原来这是一个印刷错误 - slice 而不是 splice 。
答案 0 :(得分:1)
我认为问题不在于call
,而在于NodeList。 NodeLists是(我认为总是)live,这意味着如果添加一个新div,它会自动成为NodeList的一部分,或者如果从文档中删除它,它也会从NodeList中删除,等等。有意义的是从NodeList中取出任何东西,这是splice
的作用。我想可能你的意思是使用slice
代替。