var myArray = [];
myArray = document.querySelectorAll('.selected');
Run Code Online (Sandbox Code Playgroud)
当我打电话给myArray.splice时 - 它是未定义的.我怎么能避免这个?我需要从该数组中删除一些DOM元素.
问题是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)
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属性的类数组对象一起使用.