如何从 HTMLCollection 中删除一个项目?
How to remove an item from HTMLCollection?
我有一些 Javascript 代码可以从 HTMLCollection 中删除一个项目,如下面的代码所示。调用 splice 时出现错误:allInputs.splice is not a function
。如果元素类型不是按钮类型,我需要从 HTMLCollection 中删除项目。
问题:我如何从这样的集合中删除一个项目?
我可以将未删除的项目传输到一个数组,然后我可以使用该数组而不是原始的 HTMLCollection,但不确定是否有任何其他更短的方法可以做到这一点。
JavaScript代码
var allInputs = contentElement.getElementsByTagName('input');
for (var i = (allInputs.length - 1) ; i >= 0; i--) {
if (allInputs[i].type !== "button") {
allInputs.splice(i, 1);//this is throwing an error since splice is not defined
}
}
HTMLCollection
是一个类似数组的对象,这意味着如果您需要从此类集合中删除一个元素,则必须将其从 DOM 中删除。您可以随时将其克隆到数组中进行操作。
您需要将其从 DOM 中删除,因此替换为:
allInputs.splice(i, 1);
与:
allInputs[i].parentNode.removeChild(allInputs[i])
甚至与 IE 6 等古老的浏览器兼容。该集合将自动更新。反向遍历集合是个好主意,因为每次删除成员时,它都会变短。
注意:
[].slice.call(allInputs)
在 IE8 等不允许宿主对象在内置方法中是 this 的浏览器中会失败。
要从 HTMLCollection images 中删除新创建的 img 我会使用下一个字符串
img.ownerDocument.images[img.index].remove()
其中 img.index 是在创建时定义的
您也可以使用 Array.splice
。但是,HTMLCollection
s 的 length
属性 是只读的,所以为了使用像 splice 这样的 Array 方法,你必须事先明确地使其可写:
Object.defineProperty(allInputs, 'length', {
writable: true
})
Array.prototype.splice.call(allInputs, i, 1)
这个其实是可以的,你只需要将你想要的元素push到另一个HTMLCollection中,然后将原来的collection设置为新的collection(或者直接使用新的collection)
var allInputs = contentElement.getElementsByTagName('input');
var inputsWeActuallyWant = [];
for (var i = (allInputs.length - 1) ; i >= 0; i--) {
if (allInputs[i].type === "button") {
inputsWeActuallyWant.push(allInputs[i]);
}
}
allInputs = inputsWeActuallyWant;
使用
var allInputs = contentElement.getElementsByTagName('input');
let newArr = []
let i = 0;
while(i<allInputs.length){
//Add Your Filter Here
if (allInputs[i].type !== "button") {
//skip this Item
i++;
}else{
//add it
newArr.push(allInputs[i])
//code..
i++;
}
}
您的新列表是 newArr
:)
之后你可以使用 newArr.forEach(function(el){//code here})
.
我有一些 Javascript 代码可以从 HTMLCollection 中删除一个项目,如下面的代码所示。调用 splice 时出现错误:allInputs.splice is not a function
。如果元素类型不是按钮类型,我需要从 HTMLCollection 中删除项目。
问题:我如何从这样的集合中删除一个项目?
我可以将未删除的项目传输到一个数组,然后我可以使用该数组而不是原始的 HTMLCollection,但不确定是否有任何其他更短的方法可以做到这一点。
JavaScript代码
var allInputs = contentElement.getElementsByTagName('input');
for (var i = (allInputs.length - 1) ; i >= 0; i--) {
if (allInputs[i].type !== "button") {
allInputs.splice(i, 1);//this is throwing an error since splice is not defined
}
}
HTMLCollection
是一个类似数组的对象,这意味着如果您需要从此类集合中删除一个元素,则必须将其从 DOM 中删除。您可以随时将其克隆到数组中进行操作。
您需要将其从 DOM 中删除,因此替换为:
allInputs.splice(i, 1);
与:
allInputs[i].parentNode.removeChild(allInputs[i])
甚至与 IE 6 等古老的浏览器兼容。该集合将自动更新。反向遍历集合是个好主意,因为每次删除成员时,它都会变短。
注意:
[].slice.call(allInputs)
在 IE8 等不允许宿主对象在内置方法中是 this 的浏览器中会失败。
要从 HTMLCollection images 中删除新创建的 img 我会使用下一个字符串
img.ownerDocument.images[img.index].remove()
其中 img.index 是在创建时定义的
您也可以使用 Array.splice
。但是,HTMLCollection
s 的 length
属性 是只读的,所以为了使用像 splice 这样的 Array 方法,你必须事先明确地使其可写:
Object.defineProperty(allInputs, 'length', {
writable: true
})
Array.prototype.splice.call(allInputs, i, 1)
这个其实是可以的,你只需要将你想要的元素push到另一个HTMLCollection中,然后将原来的collection设置为新的collection(或者直接使用新的collection)
var allInputs = contentElement.getElementsByTagName('input');
var inputsWeActuallyWant = [];
for (var i = (allInputs.length - 1) ; i >= 0; i--) {
if (allInputs[i].type === "button") {
inputsWeActuallyWant.push(allInputs[i]);
}
}
allInputs = inputsWeActuallyWant;
使用
var allInputs = contentElement.getElementsByTagName('input');
let newArr = []
let i = 0;
while(i<allInputs.length){
//Add Your Filter Here
if (allInputs[i].type !== "button") {
//skip this Item
i++;
}else{
//add it
newArr.push(allInputs[i])
//code..
i++;
}
}
您的新列表是 newArr
:)
之后你可以使用 newArr.forEach(function(el){//code here})
.