Javascript добавить элемент в текущий массив - PullRequest
11 голосов
/ 08 марта 2011

Я пытаюсь добавить элемент в текущий массив.

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

Поступая таким образом, я получаю ошибку и не получаю значения 1 и 2, после получения коллекции гиперссылок при попытке добавить новый элемент выдается ошибка: объект не поддерживает это свойство или метод, который метод push.

Что происходит с массивом после назначения набора гиперссылок? Как я могу добавить новый предмет к нему?

Ответы [ 2 ]

14 голосов
/ 08 марта 2011

Вы имели в виду arrayValues.push(document.getElementsByTagName('a'));?

В противном случае вы присваиваете NodeList, возвращаемое getElementsByTagName(), которое перезаписывает массив, в который вы только что выдвинули значения.

Примечание: здесь нет смысла использовать new Array(). Просто напишите var arrayValues = [];.

2 голосов
/ 08 марта 2011

Если вы хотите поместить все элементы <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");
...