getElementsByTagName для нескольких тэгов
Код:
var a = document.getElementsByTagName('tag1'); Или может можно как-то искать сразу по нескольким тэгам. в результате должен работать следующий код: Код:
for(var i=0; i < длина a+b;i++){ |
Создайте новый массив последовательным перебором каждой коллекции элементов.
|
Хотелось бы найти вариант получше. Если он есть.
|
кросс-браузерного получше нет
Все браузеры, кроме IE: var list1 = document.getElementsByTagName("tag1"); var list2 = document.getElementsByTagName("tag2"); list1 = Array.prototype.slice.call(list1); // тут IE выдаст ошибку list2 = Array.prototype.slice.call(list2); list1 = list1.concat(list2); for (var i = 0; i < list1.length; i++) { … } Браузеры, поддерживающие Selectors API (FF3, IE8, Safari3.2, Google Chrome, Opera 9.6): var list = document.querySelectorAll("tag1,tag2"); for (var i = 0; i < list.length; i++) { … } |
document.getElementsByTagName('*')А при переборе уже имя тега проверять. |
Цитата:
Octane дал одно из правильных решений. Только я бы всё таки прототайп не стал трогать. Можно и так реализовать: function getTagsNames(){ var res=new Array(); var tmp=null; for(var a=0;a<arguments.length;a++){ tmp=document.getElementsByTagName(arguments[a]); for(var t=0;t<tmp.length;t++) res.push(tmp[t]); } return res; } Ну и собственно вызов var mytags=getTagsNames('div','span'); Количество указываемых тагов может быть неограниченным от 0 и выше. Последовательность тагов в массиве будет соответсвовать тому, как вы передадите их в параметрах функции. Ну и собсно, если ничего не найдено, вернётся пустой массив. |
Спасибо всем.
|
Цитата:
|
Цитата:
|
|
Цитата:
Что касательно возвращаемого массива.... Ну так любая созданная переменная создаётся в памяти, будь то array, будь то int, и любая из них память откушивает, каждая в своей мере, но откушивает. Тут собственно уже ложится дело на плечи разработчика какие данные возвращать и как это скажется на памяти, если мучает параноя =) Я предложил свой вариант, для остальных - на их усмотрение, как это можно применить на собственной практике. |
Вот некропостеры-то.
Цитата:
Про getElementsByTagName. Это такая виртуальная штука. Она содержит в себе имя тега и не содержит в себе выборку по этому тегу. Поиск нужного элемента происходит при обращении к нему. Поэтому вызов getElementsByTagName будет всегда очень быстрый, а взятие элемента из коллекции -- медленно. Напротив, если положить все элементы в массив, т.е. обойти заранее коллекцию, то взятие из массива будет уже быстрым. Выводы: если по коллекции нужно пройтись один раз, или вообще нужен только один элемент, то не надо класть все элементы в массив. Если элементы перебирать нужно несколько раз, то лучше положить их в массив. |
Часовой пояс GMT +3, время: 07:03. |