Javascript.RU

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

childNodes не работает :(
Вечер добрый столкнулся с тем, что надо скрипт под safari переделывать, и собственно проблема в том что "childNodes" вообще каряво в нём как-то работают, методом тыка я так и не смог установить закономерности как он детей находит, подскажите кто может или ссылочку дайте, где описанно как childnodes под safari пашет...
Ответить с цитированием
  #2 (permalink)  
Старый 15.01.2009, 20:10
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,234

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

прочитайте на этом сайте раздел статьи про DOM
после этого у вас, думаю проблемы отпадут
Ответить с цитированием
  #3 (permalink)  
Старый 15.01.2009, 22:48
Интересующийся
Отправить личное сообщение для Ilya Посмотреть профиль Найти все сообщения от Ilya
 
Регистрация: 09.01.2009
Сообщений: 14

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. Это необходимо для проверки того, какие узлы являются элементами.

Последний раз редактировалось Ilya, 15.01.2009 в 23:04.
Ответить с цитированием
  #4 (permalink)  
Старый 16.01.2009, 11:59
Новичок на форуме
Отправить личное сообщение для mirniy Посмотреть профиль Найти все сообщения от mirniy
 
Регистрация: 03.12.2008
Сообщений: 8

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работает в Mozilla и не работает в IE Maxidrom Events/DOM/Window 4 27.02.2010 16:37
Работает в IE, не работает в Opera SunYang Общие вопросы Javascript 19 27.02.2009 23:43
DatePicker не работает при сипользование innerHTML AJlekceu jQuery 2 26.10.2008 17:49
Не работает SetInterval(SetInterval в скрипте на компе) Гость Общие вопросы Javascript 0 01.08.2008 21:10
Код не работает в седьмом Эксплорере... vol4ara Общие вопросы Javascript 0 14.07.2008 18:53