JavaScript NodeList - PullRequest
       19

JavaScript NodeList

27 голосов
/ 27 мая 2009

есть ли способ присоединиться к 2 спискам NodeList, возвращаемым 2 вызовами document.getElementsByTagName?

Скажи, у меня есть следующий код

var inputs = documentElement.getElementsByTagName('input');
var selects = document.getElementsByTagName('select');

Я хочу просмотреть результаты. Возможно ли это за один цикл?

Заранее спасибо!

Ответы [ 11 ]

0 голосов
/ 27 мая 2009

Сначала я подумал, что это возможно для объединения массивов с использованием Array.prototype, например:

Array.prototype.concat.call(selects, inputs);

Но это не работает, так что я сделал массивы из коллекций узлов и конкатанировал их. Выглядит так:

(function () {

    var inputs = document.getElementsByTagName('input'),
        selects = document.getElementsByTagName('select'),
        result,
        i,
        node;

    function convert (collection) {
        var a = [];
        for (var i = 0, length = collection.length; i < length; i++) {
            a.push(collection[i]);
        }
        return a;
    }

    // concatenation && convertation
    result = Array.prototype.concat(convert(inputs), convert(selects));
    // traversing
    i = result.length;
    while(node = result[--i]) {
        alert(node.getAttribute('name'));
    }

})();
...