从数组中删除元素:pop不是一个函数(javascript)

3
thead = new Array();
alert(thead.length);
thead = document.getElementsByTagName("th");
alert(thead.length);


thead.pop();
alert(thead.length);

document.getElementsByTagName("th") 返回的是一个元素数组,因此 thead 变量应该是一个数组。但如果是这样,为什么会提示错误 "thead.pop() 不是一个函数"?


你是想从DOM中删除还是只是从列表中删除?如果你真的想从DOM中删除它,请这样做... var last = thead[thead.length - 1]; last.parentNode.removeChild(last); 元素将从DOM中删除,以及thead列表。 - user1106925
3个回答

7

getElementsByTagName (文档) 不返回一个 Array,而是返回一个 NodeList。就像链接的 NodeList 文档中所说:

NodeList 的使用方式与数组非常相似,因此很容易想要在它们上面使用 Array.prototype 方法。然而,这是不可能的。

你可以使用一些类似于 Array 的方法来处理 NodeList,甚至可以将一些 Array.prototype 方法应用到它们上面,但是你应该阅读文档以避免 "陷阱",特别是当 NodeList 是 "live" 时可能会出现问题。


好的,我可以停止编辑了。只是说静态节点列表可以像数组一样处理,而活动节点列表则不行。 - Esailija
是的,抱歉,我在你编辑时添加了一些澄清和文档。 - JAAulde

0

0
技术上讲,document.getElementsByTagName 返回一个 NodeList 对象,该对象没有 pop 函数。
尝试一下 alert(Array.isArray(thead)),你会发现它返回 false。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接