[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: getElementsByTagName
ApuktaChehov
Здравствуйте уважаемые!

Как все мы знаем, с помощью getElementsByTagName можно получить какой-нибудь узел HTML дерева имея в наличии родителя искомого элемента и предполагаемый порядковый номер.
Представим такой код:

<ul id="ul1">
<li></li>
<li>
<ul
id="ul2">
<li></li>
<li></li>
<li></li>
</ul>
</li>
<li></li>
</ul>

тут мы видимо два списка. Второй список находится в одной из строк первого списка.

Если сделать так: ul1.getElementsByTagName('li')[2] то мы получим не третий li первого списка, а первый li второго списка. Получается что getElementsByTagName ищет все указанные элементы которые являются детьми родителя, при этом не важно имеют ли эти дети родителей, которые в свою очередь являются детьми основного родителя.

Вопрос какой. Как же можно получить всех детей определенного элемента миную, те элементы, которые не являются детьми на прямую, т.е. вложенные еще в какие-нибудь элементы. В данном примере мне нужно получить все элементы li ul1.

Если плохо объяснил, скажите, я еще раз попытаюсь рассказать все это.

Спасибо!



Спустя 8 минут, 23 секунды (10.12.2010 - 12:35) ApuktaChehov написал(а):
тьфу ты, косячно вопрос задал. Как получить то что мне надо, я уже придумал. Я хотел узнать, может быть уже имеются готовые средства, о которых я ничего не знаю.

Спасибо.

Спустя 15 минут, 28 секунд (10.12.2010 - 12:50) linker написал(а):
jQuery smile.gif

Спустя 6 минут, 52 секунды (10.12.2010 - 12:57) ApuktaChehov написал(а):
Не, это не серьезно. Ради одного дела грузить стоко клио букаф.

Может еще кто подскажет?

Спустя 26 минут, 6 секунд (10.12.2010 - 13:23) Slays написал(а):
самому создать небольшую функцию для подобных задач и использовать =)

Спустя 8 минут, 10 секунд (10.12.2010 - 13:31) ApuktaChehov написал(а):
Slay - дык, я по тому и спрашиваю, мож кто уже сделал. Но в любом случае, я уже написал, почти. Если кому интересно, поделюсь.

Всем спасибо.

Спустя 40 минут, 50 секунд (10.12.2010 - 14:12) sergeiss написал(а):
Если поможет.... То ниже находится часть кода из сделанного мной разбора XML, принимаемого в аяксовом диалоге. Цель - настроить нужные инпуты, списки и прочую лабуду так, чтобы они все соответствовали параметрам, выбранным пользователем.

Разбор DOM, как я понимаю, аналогичен.

answ=xmlResponse.getElementsByTagName( 'info' );

for( i=0; i<answ.length; i++)
{
obj=document.getElementById( answ.item(i).getAttribute('id') );
value=answ.item(i).getAttribute('value');
switch( answ.item(i).getAttribute('type') )
{
case 'html':
try { obj.innerHTML=answ.item(i).firstChild.data; }
catch( e ) { }
break;
case 'select':
sel=obj;
sel.length=0;
// тут был код, отвечающий за установку multiple
opt=answ.item(i).getElementsByTagName( 'option' );
for( j=0; j< opt.length; j++ )
{
newopt=new Option( opt.item(j).firstChild.data, opt.item(j).getAttribute('value'));
// а тут был код, отвечавший за установку опций...

}
break;
case 'visible':
obj.style.display=value; break;
case 'value':
default:
obj.value=value;
break;

}
// и тут был код
} // end of loop

Кое-что я тут поудалял, ужо извиняй :) Только структуру оставил.

PS. А вот примерно такого вида XML сюда попадают:
<response>
<info
id="contacts" type="select" size="6">
<option
value="-1">
Фамилия Имя Отчество, должность, тел. , факс , e-mail
</option>
<option
value="28">
Марков Алексей , , тел. , факс , e-mail
</option>
</info>
<info
id="site_owner" type="html" value="">
Контора
какая-то...
</info>
<info
id="site_room" type="html" value="">
Помещение
</info>
<info
id="site_remark" type="html" value="">
Примечание
</info>
<info
id="connect_site" type="visible" value="none"/>
<info
id="familyname" type="value" value=""/>
<info
id="firstname" type="value" value=""/>
<info
id="secondname" type="value" value=""/>
<info
id="position" type="value" value=""/>
<info
id="phone" type="value" value=""/>
<info
id="fax" type="value" value=""/>
<info
id="mail" type="value" value=""/>
</response>

Спустя 40 минут, 46 секунд (10.12.2010 - 14:53) ApuktaChehov написал(а):
Вах. Какая радость! Сделал я такую функцию, прикрутил к проекту и все работает как надо!

Может кому пригодится:
function gEbTn(parent, cur_tag_name)
{
//Узнаем кол-во узлов-детей у заданного узла(parent)
var quant_el = parent.getElementsByTagName(cur_tag_name).length;

var i;

//Счетчик нужных узлов
var counter = 0;

//Массив с объектами
var obj_arr = new Array();

//Обходим каждый узел
for(i = 0; i < quant_el; i++)
{
//Если родитель текущего узла - является заданным узлом(parent)
//то это наш клиент, а все остальные игнорируются.

if(parent.getElementsByTagName(cur_tag_name)[i].parentNode == parent)
{
//Добавляем в массив новый элемент и увеличиваем массив на 1 еденицу
obj_arr[counter] = parent.getElementsByTagName(cur_tag_name)[i];
counter++;
}
}


return obj_arr;
}


Всем огроменнейшее спасибо!


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.