Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Перевод на новую строку JS воспринимает как объект DOM (https://javascript.ru/forum/events/24219-perevod-na-novuyu-stroku-js-vosprinimaet-kak-obekt-dom.html)

Rig 21.12.2011 21:57

Перевод на новую строку JS воспринимает как объект DOM
 
Прошу прощения за возможно нелепый вопрос, собственно с JavaScript работаю не очень часто и вот возникла следующая ситуация:

В функцию получаю id элемента "UL", пытаюсь через firstChild вычислить id первого элемента "LI". В случае если html код выглядит подобно:
Код:

<ul>
<li>....

firstChild вместо первого "li" находит объект типа text.

А если убрать перевод строки таким образом:
Код:

<ul><li>....
то firstChild находит искомый "li".

Получается, что для нормальной работы с DOM нужно весь код в одну строку писать?

devote 21.12.2011 22:29

правильно понимает, объект TextNode, берите следующий объект за ним проверяйте по свойству nodeType если равен 3 значит это TextNode, если 1 значит тег

Rig 21.12.2011 23:08

Большое спасибо!

nerv_ 21.12.2011 23:18

Rig, как вариант так
<html>
    <head>
        <meta charset="utf-8">
        <style type="text/css">
            body { margin:0px; }
        </style>
        <script type="text/javascript">
			function q() {
				var x = document.getElementsByTagName('ul')[0];
				var j = x.getElementsByTagName('li');
				for(var i = 0; i < j.length; i++) {
					alert(j[i].innerHTML);
				}
			}
        </script>
    </head>
    <body onload="q();">
		<ul>
			<li>1</li>
			<li>2</li>
		</ul>
    </body>
</html>

рони 22.12.2011 00:33

Rig,
Вариант ...
document.getElementById(id).children[0]

B@rmaley.e><e 22.12.2011 00:51

document.getElementById(id).firstElementChild
Правда, в каком-нибудь IE6 поддерживаться не будет.

розовый слоник 26.12.2011 20:08

document.getElementById(id).getElementsByTagName(' li')[0] - разве так не подходит???
если нет про проганите через while и children

var el = document.getElementById(id).children[0]
while(el.tagName != 'LI'){
el = el.nextSibling
}


Часовой пояс GMT +3, время: 09:51.