Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.06.2009, 00:04
Интересующийся
Отправить личное сообщение для MaxB Посмотреть профиль Найти все сообщения от MaxB
 
Регистрация: 24.06.2009
Сообщений: 29

getElementsByTagName для нескольких тэгов
Код:
var a = document.getElementsByTagName('tag1');
var b = document.getElementsByTagName('tag2');
Подскажите, плиз, как объединить a и b в один массив?
Или может можно как-то искать сразу по нескольким тэгам.

в результате должен работать следующий код:

Код:
for(var i=0; i < длина a+b;i++){
выполнение действий над  элементом массива a+b.
}
Ответить с цитированием
  #2 (permalink)  
Старый 27.06.2009, 01:13
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Создайте новый массив последовательным перебором каждой коллекции элементов.
Ответить с цитированием
  #3 (permalink)  
Старый 27.06.2009, 01:17
Интересующийся
Отправить личное сообщение для MaxB Посмотреть профиль Найти все сообщения от MaxB
 
Регистрация: 24.06.2009
Сообщений: 29

Хотелось бы найти вариант получше. Если он есть.
Ответить с цитированием
  #4 (permalink)  
Старый 27.06.2009, 01:40
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

кросс-браузерного получше нет

Все браузеры, кроме 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++) {
    …
}

Последний раз редактировалось Octane, 27.06.2009 в 01:48.
Ответить с цитированием
  #5 (permalink)  
Старый 27.06.2009, 14:19
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

document.getElementsByTagName('*')
А при переборе уже имя тега проверять.
Ответить с цитированием
  #6 (permalink)  
Старый 27.06.2009, 15:23
Аспирант
Отправить личное сообщение для Pattern Посмотреть профиль Найти все сообщения от Pattern
 
Регистрация: 13.05.2009
Сообщений: 37

Сообщение от Kolyaj Посмотреть сообщение
document.getElementsByTagName('*')
А при переборе уже имя тега проверять.
Не советую никогда так делать, ибо 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 и выше. Последовательность тагов в массиве будет соответсвовать тому, как вы передадите их в параметрах функции. Ну и собсно, если ничего не найдено, вернётся пустой массив.
Ответить с цитированием
  #7 (permalink)  
Старый 27.06.2009, 17:44
Интересующийся
Отправить личное сообщение для MaxB Посмотреть профиль Найти все сообщения от MaxB
 
Регистрация: 24.06.2009
Сообщений: 29

Спасибо всем.
Ответить с цитированием
  #8 (permalink)  
Старый 27.06.2009, 18:54
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Pattern
Не советую никогда так делать, ибо getElementsByTagName вернёт список (массив) всех элементов на странице. А на динамически создаваемых страницах их может быть немереное количество -> "пожирание" памяти.
В том-то и дело, что не массив. Кто вам сказал, что они в память все загружаются? А вот ваша функция как раз массив формирует, и как раз память и жрет.
Ответить с цитированием
  #9 (permalink)  
Старый 07.12.2011, 19:42
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Сообщение от Kolyaj Посмотреть сообщение
В том-то и дело, что не массив.
Как не массив? Разве document.getElementsByTagName('*') возвращает не массив? А что же тогда перебирать потом?
Ответить с цитированием
  #10 (permalink)  
Старый 07.12.2011, 20:45
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

https://developer.mozilla.org/en/DOM...mentsByTagName
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение одиночных тэгов Pattern Events/DOM/Window 7 26.05.2009 23:29
Можно ли как для произвольного массива создавать вызовы функций , имеющих на входе kefi Общие вопросы Javascript 3 17.04.2009 16:53
zoom для нескольких фото kodermax jQuery 1 20.02.2009 15:46
Задание CSS для загруженных во фрейм страниц <Pool> Общие вопросы Javascript 1 14.01.2009 16:59