Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.12.2008, 15:19
Интересующийся
Отправить личное сообщение для korzhik Посмотреть профиль Найти все сообщения от korzhik
 
Регистрация: 14.07.2008
Сообщений: 25

Поиск элементов в контексте
Всем привет.
Начну сразу с примера.
Дано: 2 divа и в каждом еще 100 divов, то есть всего их 202, и в последнем еще 1 таблица.
структура примерно такая
div
 | ... 
 | div#100
    | - table
div
 | ... 
 | div#100
    | - table


Найти: $('div div') - правильный результат должен быть 200, и $('div div table') - результат соответственно 2.

Вообщем, интересует как правильно искать такие элементы.

первое, что пришло в голову было чтото вроде:
var a = [];
var obj = document.getElementsByTagName('div');
for (var h = 0, l = obj.length; h < l; h++) {    
      var el = obj[h].getElementsByTagName('div');      
      for (var j =0, l1 = el.length; j < l1; j++)
        a.push(el[j]);        
 }

почему это не работает, думаю понятно
Потом был вариант с индексом добавленных элементов, работает, но жутко медленно.
var a = document.getElementsByTagName('div'), t, b=[];
       var n = 0;
       var tt;
       while( t = a[n++] ) {
      		var g = t.getElementsByTagName('div');
      		var i = 0;
      		while( tt = g[i++] ){
      			if(!tt._)
      				b.push(tt);
      			tt._ = 1;
      		}
      	}


подскажите что-нибудь плз
Ответить с цитированием
  #2 (permalink)  
Старый 29.12.2008, 15:39
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Метод getElementsByTagName ищет вообще все дочерние элементы, относительно родителя (или document), чтобы просматривать только на 1 уровень вложенности, используйте атрибут childNodes, но помните, что в эту коллекцию попадают и текстовые узлы (nodeType == 3), поэтому во время перебора нужно делать проверку if(…nodeType == 1) {…}

var i, list = document.body.childNodes, length = list.length;
for(i = 0; i < length; i++) if(list[i].nodeType == 1) {
    …
}


Для поиска внешних DIV'ов в вашем примере, лучше задать им какой-нибудь класс и искать по нему, с помощью метода getElementsByClassName

Последний раз редактировалось Octane, 29.12.2008 в 15:48.
Ответить с цитированием
  #3 (permalink)  
Старый 29.12.2008, 22:27
Интересующийся
Отправить личное сообщение для korzhik Посмотреть профиль Найти все сообщения от korzhik
 
Регистрация: 14.07.2008
Сообщений: 25

Не не катит. Речь идет о разработке собственного механизма цсс селекторов. childnodes можно использовать для для селектора ">" (div > span) например.
А в моем примере, дочерние дивы не обязательно "тру" дочерние, а например, div p div.
Ответить с цитированием
  #4 (permalink)  
Старый 30.12.2008, 21:09
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от korzhik
Речь идет о разработке собственного механизма цсс селекторов
Нескромный вопрос: а зачем? И еще один: о конечных автоматах что-нибудь слыхали?
Ответить с цитированием
  #5 (permalink)  
Старый 30.12.2008, 21:15
Интересующийся
Отправить личное сообщение для korzhik Посмотреть профиль Найти все сообщения от korzhik
 
Регистрация: 14.07.2008
Сообщений: 25

1. Решил потренироваться, и написать очередной велосипед для выборки элементов по цсс селекторам
2. Да, слышал
Ответить с цитированием
  #6 (permalink)  
Старый 30.12.2008, 21:27
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от korzhik
Да, слышал
Уже лучше Если вы в цикле будете делать getElementsByTagName вы не дождетесь окончания работы скрипта на нормальной страничке.
Ответить с цитированием
  #7 (permalink)  
Старый 31.12.2008, 11:35
Интересующийся
Отправить личное сообщение для korzhik Посмотреть профиль Найти все сообщения от korzhik
 
Регистрация: 14.07.2008
Сообщений: 25

Не вижу связи
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск на странице no_name jQuery 4 07.09.2010 13:26
IE: создание элементов. Jurasmi Events/DOM/Window 12 28.11.2008 02:10
Для чего ограничен поиск? ZoNT Сайт Javascript.ru 4 01.10.2008 15:55
Поиск в массиве через JavaScript Noran Общие вопросы Javascript 0 10.08.2008 17:31
Создание элементов createElement в IE. Phoenix Общие вопросы Javascript 6 26.09.2007 19:43