Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Мусор в childNodes в FireFox, почему в ИЕ работает, в лисе нет? 
:(
    Опции темы
Aliance
Дата 16.12.2006, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



У меня такая проблема, импортирую новости из форума, в самом форуме сделал дополнительный bb код раскрывающегося кода, так вот, так как добавляю я его из админки - то не знал как сгенерировать уникальное число для индификатора раскрываемого слоя. Соотв. сделал проще - отталкиваюсь от нод. Но код почему-то не работает в Лисе:

Код

function show_hide_text(child_div_msg, msg) {
   var show_msg = msg.split("|")[0];
   var hide_msg = msg.split("|")[1];
   if (child_div_msg.parentNode.childNodes[1].style.display == "none") {
      child_div_msg.parentNode.childNodes[1].style.display = "block";
      child_div_msg.parentNode.childNodes[0].innerHTML = hide_msg;
   } else {
      child_div_msg.parentNode.childNodes[1].style.display = "none";
      child_div_msg.parentNode.childNodes[0].innerHTML = show_msg;
   }
}


Код

<div style="cursor: hand; color: #847441; font-size: 12px; font-family: Verdana, Tahoma, Helvetica, sans-serif; text-decoration: none" onclick="show_hide_text(this, 'показать|скрыть')">показать</div>
<div style="display: none">text</div>
</div>


Есть у кого-то какие-то мысли? Плюс еще бы не плохо выделенное красным слово подставлять автоматически, как синее:
Цитата

<div style="cursor: hand; color: #847441; font-size: 12px; font-family: Verdana, Tahoma, Helvetica, sans-serif; text-decoration: none" onclick="show_hide_text(this, 'показать|скрыть')">показать</div>
<div style="display: none">text</div>
</div>

PM MAIL WWW ICQ Skype   Вверх
vasac
Дата 16.12.2006, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 13
Всего: 36



Firefox пихает в childNodes еще пусты текстовые ноды. Так что:
Код

child_div_msg.parentNode.getElementsByTagName( "div" ).item( 0 ); // первый див (который, кстати, так же child_div_msg)
child_div_msg.parentNode.getElementsByTagName( "div" ).item( 1 ); // второй


PM WWW   Вверх
Aliance
Дата 17.12.2006, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Что-то все осталось без изменений (дело не в кеше точно, обновил) - в ИЕ работает, в ФФ нет.
PM MAIL WWW ICQ Skype   Вверх
Nicholas_S
Дата 17.12.2006, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 12.10.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 19



Aliance, позволил себе немного переписать твою функцию на более компактный вид (люблю порядок  smile)

Код

<script type="text/javascript">
function show_hide_text(divObj, msg)
{
   with (divObj.parentNode.getElementsByTagName('DIV')[1])
     if (style.display == 'none')
     {
        style.display = 'block';
        divObj.innerHTML = msg[1];
     }
     else
     {
        style.display = 'none';
        divObj.innerHTML = msg[0];
     }
}
</script>

<div>
   <div style="cursor: pointer; color: #847441; font-size: 12px; font-family: Verdana, Tahoma, Helvetica, sans-serif; text-decoration: none" onclick="show_hide_text(this, ['показать','скрыть'])">показать</div>
  <div style="display: none">text</div>
</div>


Это сообщение отредактировал(а) Nicholas_S - 17.12.2006, 02:21


--------------------
...все в мире относительно
PM   Вверх
Sardar
Дата 17.12.2006, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Aliance, childNodes согласно DOM от W3C содержит всё, и строки текста для форматирования и комменты в коде, потому в слепую по индексу обращаться нельзя. В ИЕ кстати тоже если вытащить его из quircksmode поставив правильный DOCTYPE. Код от Nicholas_S ИМХО наиболее простой (в тайне мечтаем о XPath smile ).


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Nicholas_S
Дата 17.12.2006, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 12.10.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 19



Sardar, 
Цитата

в тайне мечтаем о XPath smile. 

где? В HTML?  smile 


--------------------
...все в мире относительно
PM   Вверх
Sardar
Дата 17.12.2006, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(Nicholas_S @  17.12.2006,  12:40 Найти цитируемый пост)
где? В HTML?

Угум, DOM дерево то одно.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Nicholas_S
Дата 17.12.2006, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 12.10.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 19



Sardar, имхо лишнее это уже, привыкли все к объектной модели. Хотя... 


--------------------
...все в мире относительно
PM   Вверх
Aliance
Дата 17.12.2006, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Не люблю with, поэтому вот конечный код:
Код

function show_hide_text(divObj) {
    var div = divObj.parentNode.getElementsByTagName('div')[1];
    if (div.style.display == 'none') {
        div.style.display = 'block';
        divObj.innerHTML = "скрыть";
    } else {
        div.style.display = 'none';
        divObj.innerHTML = "показать";
    }
}


Спасибо за помощь!

ЗЫ: жаль что пришлось отказаться от идеи с выбираемым текстом скрыть и показать  smile 
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0741 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.