用于 DOM 元素数组的 Javascript 拼接
Javascript splice for array of DOM elements
var myArray = [];
myArray = document.querySelectorAll('.selected');
当我调用myArray.splice时 - 它是未定义的。我怎样才能避免这种情况?我需要从该数组中删除一些 DOM 元素。
问题是querySelectorAll(..)
返回一个节点列表(NodeList
) - 而不是一个标准的JS数组。
您可能想要如下所示的内容:
Array.prototype.slice.call(document.querySelectorAll('.selected'), <begin>, <end>);
更新
我错过了您尝试删除的部分,谢谢@torazaburo。幸运的是,您可以直接在 NodeList 上应用过滤器,而不是通过数组转换。如下所示:
var arrayOfNodes = [].filter.call(document.querySelectorAll(".selected"), function(curNodeItem) {
return shouldCurrentNodeBeRetained(curNodeItem)? true : false;
//expanded for clarity.
});
querySelectorAll
是一个类似数组NodeList
集合,但它不是一个数组,因为它不继承自Array.prototype
。要将其转换为实数组,您将slice
以下方式使用:
var myArray = [].slice.call(document.querySelectorAll('.selected'));
可以使用这样的slice
,因为Array.prototype.slice
是有意通用的方法,这意味着它的内部实现不会检查this
值是否实际上是实例Array
。因此,slice
可以与任何具有数字索引和length
属性的类似数组的对象一起使用。
document.querySelectorAll 返回 NodeList,而不是 Array。
因此,默认情况下,NodeList 上没有拼接方法。
但是,您可以为 A 节点列表制作类似的原型。
这是一个有效的JSFiddle,它直接从DOM中删除了拼接等元素,您可以根据需要对其进行修改。
var myArray = [];
myArray = document.querySelectorAll('.selected');
//This is a primitive analogue of splice without adding new elements, it will not remove element from NodeList, however will remove it directly from dome, then it will return the resulting array (As Array), because NodeList is unmodifiable;
NodeList.prototype.splice = function(pos, numToRemove){
var initRemCount = remCount = numToRemove ? numToRemove : 1;
var removed = [];
for(var i = 0; i < this.length; i++){
if(!remCount)
break;
var elm = this[i];
if(i >= pos){
//elm.parentElement.removeChild(elm); //I commented this out, 'cause you say you dont want to delete members from DOM, uncomment this to do so
remCount--;
}
}
return [].slice.call(this, pos, pos + initRemCount);
}
var resultArray = myArray.splice(2, 2);
//This is the Araay already not a NodeList
console.log(resultArray);
相关文章:
- 将数组的拼接分配给自身时,Javascript控制台打印不起作用
- Javascript拼接对象而不是数组
- Javascript拼接数组值
- 在javascript中拼接一个复杂的多维数组
- 从数组Javascript中拼接对象
- 我想在单击clear链接时使用javascript中的拼接删除整个列表
- 在Javascript中重新建立对象数组的索引(无拼接)
- 如何在javascript中拼接数组中的项
- 拼接数组的Javascript只是替换值而不是删除它
- JavaScript uncatch TypeError:无法在第二次迭代时调用未定义的方法“拼接”
- Javascript:通过在while循环内推送/拼接来随机化数组
- 为什么在 Javascript 中拼接数组中的对象不返回数组
- Javascript拼接删除了错误的项目
- 用于 DOM 元素数组的 Javascript 拼接
- Javascript拼接方法问题
- Javascript 拼接在 jQuery .each() 上被打破
- Javascript拼接数组
- Javascript拼接方法混淆
- javascript拼接的问题
- JavaScript拼接无法正常工作