document.getElementsByTagName возвращаемое значение - PullRequest
4 голосов
/ 22 декабря 2010

Я хочу использовать

document.getElementsByTagName('input').concat( some_array )

, но document.getElementsByTagName() возвращает object вместо array

Как получить массив?

Ответы [ 2 ]

7 голосов
/ 22 декабря 2010

К сожалению, чтобы сделать это полностью надежно, вам нужно сделать это вручную, например:

function toArray(arraylike) {
    var array= new Array(arraylike.length);
    for (var i= 0, n= arraylike.length; i<n; i++)
        array[i]= arraylike[i];
    return array;
}

toArray(document.getElementsByTagName('img')).concat(...)

Хотя вы часто можете избегать использования Array.prototype.somearraymethod.call, как в ответе Шона, это может не сработать в браузерах, где объект NodeList, возвращаемый getElementsByTagName, является "хост-объектом". *

ECMAScript определяет, что вызывающие методы в Array.prototype должны работать для объектов native-JS с length и целочисленными свойствами, а также для объекта arguments, но он не дает никаких гарантий для хост-объектов. Как и почти все, что связано с объектами-хостами, браузер может свободно подставлять вас так, как ему нравится.

3 голосов
/ 22 декабря 2010

Если вам не нужно поддерживать версии IE, меньшие или равные 7 *, используйте slice():

Array.prototype.slice.call(
    document.getElementsByTagName('img')).concat(some_array)

* Спасибо bobince!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...