11

我正在尝试将一个项目添加到当前数组。

var arrayValues = new Array();
arrayValues.push("Value 1");
arrayValues.push("Value 2");
arrayValues = document.getElementsByTagName('a');
arrayValues.push("Value 3");

通过这种方式,我得到一个错误,我没有得到值 1 和值 2,当我尝试添加一个新项目时获取超链接集合后,它抛出错误:对象不支持这个属性或方法,它是推送方法.

分配超链接集合后数组发生了什么?如何向其中添加新项目?

4

2 回答 2

14

你的意思是arrayValues.push(document.getElementsByTagName('a'));

否则,您将分配NodeList返回的 by getElementsByTagName(),这会覆盖您刚刚将值推入的数组。

旁注:没有理由在new Array()这里使用。就写吧var arrayValues = [];

于 2011-03-08T03:52:10.480 回答
2

如果要将所有<a>元素推送到数组中,则必须先将 NodeList 转换为数组。大多数人使用Array.prototype.slice.call(nodelist).

一旦你有了一个数组,你就可以在一次调用array.push中结合使用function.apply来推送它们。

生成的代码如下所示:

var arrayValues = [];
arrayValues.push("Value 1");
arrayValues.push("Value 2");
arrayValues.push.apply(arrayValues, Array.prototype.slice.call(document.getElementsByTagName('a')));
arrayValues.push("Value 3");
于 2011-03-08T03:58:53.283 回答