Как все мы знаем, с помощью 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

Спустя 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, как я понимаю, аналогичен.
Кое-что я тут поудалял, ужо извиняй :) Только структуру оставил.
PS. А вот примерно такого вида 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;
}
Всем огроменнейшее спасибо!
_____________