Javascript拼接DOM元素数组

Ale*_*rff 5 javascript arrays

var myArray = [];
myArray = document.querySelectorAll('.selected');
Run Code Online (Sandbox Code Playgroud)

当我打电话给myArray.splice时 - 它是未定义的.我怎么能避免这个?我需要从该数组中删除一些DOM元素.

Ult*_*nct 7

问题是querySelectorAll(..)返回一个nodes(NodeList)列表- 而不是标准的JS数组.

可能是你想要的东西如下:

Array.prototype.slice.call(document.querySelectorAll('.selected'),  <begin>, <end>);
Run Code Online (Sandbox Code Playgroud)

UPDATE

我错过了你要删除的部分,谢谢@torazaburo.幸运的是,您可以直接在NodeList上应用过滤器,而不是通过数组转换.如下所示:

var arrayOfNodes = [].filter.call(document.querySelectorAll(".selected"), function(curNodeItem) {
     return shouldCurrentNodeBeRetained(curNodeItem)? true : false;
    //expanded for clarity.    
});
Run Code Online (Sandbox Code Playgroud)


dfs*_*fsq 6

querySelectorAll是一个NodeList 类似数组的集合,但它不是一个数组,因为它不会继承Array.prototype.要将其转换为真实数组,您可以使用slice以下方式:

var myArray = [].slice.call(document.querySelectorAll('.selected'));
Run Code Online (Sandbox Code Playgroud)

slice由于这Array.prototype.slice是有意的通用方法,这意味着它的内部实现不会检查this值是否实际是Array实例,因此可以像这样使用.因此slice可以与任何具有数字索引和length属性的类数组对象一起使用.