Чтобы объединить нодлисты, преобразуйте их в массивы, используя Array.prototype.slice.call
, а затем объедините их как обычно.
var a = Array.prototype.slice.call(document.getElementsByTagName("p")),
b = Array.prototype.slice.call(document.getElementsByTagName("div"))
var c = a.concat(b);
Редактировать: (Отвечая на ваш комментарий)
Если у вас есть только несколько типов элементов, это нормально, но производительность снижается с увеличением количества вызовов DOM. Может быть лучше и быстрее сделать document.getElementsByTagName('*')
, пройтись по списку и выбрать элементы с требуемым nodeName
.
Еще одна вещь, которую нужно иметь в виду, это то, что Array.prototype.slice
метод, использованный выше, может не работать во ВСЕХ браузерах. Посмотрите на стартовую строку комментария # 723 в sizzle.js (механизм выбора позади jQuery)
Конечно, лучше всего использовать библиотеку, такую как jQuery, которая обрабатывает всю головную боль. Вы можете просто сделать:
$("input, select, textarea, <other tags>")