我从网页上删除了一个数组:
myvar = document.querySelectorAll('#tblItineraryModuleStayDetail > tbody > tr')
在控制台中返回一个数组:
我需要做的是这个数组的子集:
所以我需要我的var的子集,其中包含第3和第5项。
我试过了:myvar.slice(3,5)
。返回错误"未定义不是函数"
如果我成功了,我会有一个包含3个项目的数组。然后,我需要在数组中保留奇数项的子集。
我如何为myvar进行子集,以便我有一个包含项目3和5的变量? 如果myvar的长度为10.我如何将其子集化为包含项目3,5,7,9?
答案 0 :(得分:3)
myvar = document.querySelectorAll('#tblItineraryModuleStayDetail > tbody > tr')
myvar是一个nodeList,它不是一个数组。所以你不能在那里使用数组函数。
但您可以使用apply
或call
来获取nodelist上的数组功能。
如何获得这些功能?
Array.prototype.slice.call(myvar, 3,5);
现在您可以在节点列表中使用slice
。
但是对于你的实际问题,通过切片也不可能只获得特定标准的子集。
您必须遍历元素并手动执行。
答案 1 :(得分:2)
我试过了:myvar.slice(3,5)。返回错误"未定义不是函数"
是的,因为querySelectorAll
返回节点列表而不是数组。另请参阅Fastest way to convert JavaScript NodeList to Array?。
我如何为myvar进行子集,以便我有一个包含项目3和5的变量?如果myvar的长度为10.我如何将其子集化为包含项目3,5,7,9?
无论如何,您需要手动执行此操作,javascript中没有这样的方法来切换带有步骤的子序列。使用
var arr = [],
myvar = document.querySelectorAll('#tblItineraryModuleStayDetail > tbody > tr');
for (var i=3; i<myvar.length; i+=2)
arr.push(myvar[i]);
(或者,如果你想要花哨的话)
var arr = Array.prototype.filter.call(document.querySelectorAll('#tblItineraryModuleStayDetail > tbody > tr'), function(_, i) {
return i%2==1 && i>2;
});