Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   childNodes не работает :( (https://javascript.ru/forum/misc/2561-childnodes-ne-rabotaet.html)

mirniy 15.01.2009 19:03

childNodes не работает :(
 
Вечер добрый столкнулся с тем, что надо скрипт под safari переделывать, и собственно проблема в том что "childNodes" вообще каряво в нём как-то работают, методом тыка я так и не смог установить закономерности как он детей находит, подскажите кто может или ссылочку дайте, где описанно как childnodes под safari пашет...

Gvozd 15.01.2009 20:10

1)скорее всего он вам выдает помимо тегов, еще и пустые текстовые блоки
2)также возможны проблемы у вас(по незнанию), если вы удаляете/добавляете Элементы

прочитайте на этом сайте раздел статьи про DOM
после этого у вас, думаю проблемы отпадут

Ilya 15.01.2009 22:48

mirniy,

Не каряво это свойство работает только под IE. Это связано с тем, что разные браузеры по разному определяют объекты узлов. FF, Opera, Netscape, Safari за объекты узлов (а именно текстовые узлы) также принимают пробелы и символы разрыва строки. Есть некоторые способы для этих браузеров, чтобы добиться нормального результата.

Первый способ.
Не использовать пробелы и символы разрыва строки.
То есть вместо того, чтобы писать так

<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="content-type" />
</head>
<body onload="alert('Дочерних узлов - ' + document.getElementsByTagName('div')[0].childNodes.length)">
<div>
<span></span>
</div>
</body>
</html>


Записать вот так

<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="content-type" />
</head>
<body onload="alert('Дочерних узлов - ' + document.getElementsByTagName('div')[0].childNodes.length)">
<div><span></span></div>
</body>
</html>


Второй способ.
Использовать цикл совместно со свойством nodeType. Это необходимо для проверки того, какие узлы являются элементами.

mirniy 16.01.2009 11:59

Добрый день, спасибо за ответы! nodeType отличное решение проблемы;)


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