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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Полная очистка ноды через innerHTML или DOM, Что применять? Сомнения. Порассуждаем? 
:(
    Опции темы
Иль
  Дата 2.8.2005, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 2
Всего: 14



Имею ссылку на ноду в переменной ttt, хочу ее очистить от ChildNodes. На вскидку приходят 4 способа
1.
Код

ttt.innerHTML = "";
2.
Код

for ( rrr=ttt.firstChild ; rrr ; rrr=rrr.nextSibling )
    ttt.removeChild( rrr )
3.
Код

rrr = ttt.childNodes
k = rrr.length
for( i = 0 ; i < k ; i++ )
    ttt.removeChild( k[ 0 ] )
4.
Код

ttt.parentNode.replaceChild( rrr = ttt.cloneNode( false ) , ttt )// называю "очистка через ж.. у родителя"


Я люблю innerHTML.
Все дело в том, что он гораздо быстрее DOM даже в Gecko.
Потом конечно же связка Интерпретатор + Циклы = Кашмарные тормоза и исходя из этого, если применять удаление через DOM и не требуется перебирать ноды чтобы что-то делать с ними, то используем очистку через клонирование (через ж.. у родителя).

Поделитесь пожалуйста соображениями. Вот если я для полной очистки оставлю только innerHTML, какие-нибудь могут быть последствия

Это сообщение отредактировал(а) Иль - 2.8.2005, 19:11


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
o.s.a.
Дата 2.8.2005, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Xo4y B MocKBy
**


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

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



Как вариант
Код

var ttt_parent = ttt.parentNode;
var ttt_1  = ttt.removeNode(true);
var ttt_2 = ttt_1.removeNode(false);
ttt_parent.appendChild(ttt_2);

Теоретически должно работать


--------------------
Не могу стоять, пока другие работают, пойду полежу.
PM MAIL ICQ   Вверх
Sardar
Дата 3.8.2005, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


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

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



Похоже removeNode это фича ИЕ, пользуемся по стандартам node.parentNode.removeChild(node);

Можно клонировать ноду без контента(cloneNode(false)), затем replaceNode старую на новую. Это если не отходить от спецификаций.

Иначе можно и innerHTML, но дальше браузера такой подход не применим smile


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


Опытный
**


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

Репутация: 2
Всего: 14



Цитата(Sardar @ 3.8.2005, 01:34)
Иначе можно и innerHTML, но дальше браузера такой подход не применим

А что может быть плохого, ведь в основном сайты никто не смотрит кроме браузеров?


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Sardar
Дата 3.8.2005, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


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

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



Цитата
А что может быть плохого, ведь в основном сайты никто не смотрит кроме браузеров?

Мы не про сайты говорим, тот же DOM ты будешь использовать например в Java smile
А руку и способ мышления набивать нужно сейчас.


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


Опытный
**


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

Репутация: 2
Всего: 14



К сожалению из-за удобства думаю переделать везде на innerHTML="", и только из-за того, что он при очистке совершенно нам ничего не рушит в ноде в отличии от
Цитата
ttt.parentNode.replaceChild( rrr = ttt.cloneNode( false ) , ttt )// называю "очистка через ж.. у родителя"

с которым потом можно долго отплясывать приводя ноду в чувства.
Все-таки всему свое время, дорасту до JAVA - потанцую smile


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
o.s.a.
Дата 8.8.2005, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Xo4y B MocKBy
**


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

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



Что-то я так и не понял к чему мы пришли в этой теме: innerHtml?
Тогда почему у меня не работает такая конструкция:
Имеем выподающий список select c несколькими option, хочу удалить все option
Код

<select id="sel_2">
 <option value="1">1
 <option value="2">2
</select>

Код

document.getElementById('sel_2').innerHtml = "";

Но select не очищается

Это сообщение отредактировал(а) o.s.a. - 8.8.2005, 11:23


--------------------
Не могу стоять, пока другие работают, пойду полежу.
PM MAIL ICQ   Вверх
Иль
Дата 8.8.2005, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 2
Всего: 14



Елки, а попробуй так
Код

innerHTML
лично я споткнулся как-то на этом. Сейчас проверю
Добавлено @ 11:39
Да, проверил, так и есть. Даже приятно что мы одновременно споткнулись на одном и томже smile

Это сообщение отредактировал(а) Иль - 8.8.2005, 11:39


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
o.s.a.
Дата 8.8.2005, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Xo4y B MocKBy
**


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

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



Делаю так
Код

var st = document.getElementById('sel_2').innerHtml;
alert(st);

Выводится undefined, но ничего из селекта не удаляется smile

Короче мне нужно чтобы пособытию все существующие option удалялись, а затем создавались новые (как создать знаю, как удалить нет)

ЗЫ
Цитата
Да, проверил, так и есть. Даже приятно что мы одновременно споткнулись на одном и томже
smile

Это сообщение отредактировал(а) o.s.a. - 8.8.2005, 12:10


--------------------
Не могу стоять, пока другие работают, пойду полежу.
PM MAIL ICQ   Вверх
Иль
Дата 8.8.2005, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 2
Всего: 14



o.s.a., посмотри на регистор символов. Не innerHtml, а innerHTML
Добавлено @ 12:19
Кстати, я часто попадался на таком. Бывает напишеш, видно что правильно, а не работает. Особенно смешно, когда вместо латыницы имя переменной кирилицой записано, вот веселуха-то мне была smile.


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
o.s.a.
Дата 8.8.2005, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Xo4y B MocKBy
**


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

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



Цитата
посмотри на регистор символов. Не innerHtml, а innerHTML

А я был просто уверен, что написал свойство правильно smile


--------------------
Не могу стоять, пока другие работают, пойду полежу.
PM MAIL ICQ   Вверх
o.s.a.
Дата 15.8.2005, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Xo4y B MocKBy
**


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

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



По САБЖу:
Теперь по стандарту DOM
Код

 function  func() {
   var elem = document.getElementById('div1');
   var newElem = elem.cloneNode(false);
   document.body.replaceChild(newElem, elem);
 }


Вот пример изпользования:
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title></title>
<style type="text/css">
 .div1 { border: 5px solid #00FF00; 
         margin: 20px 400px 0px 10px; 
         padding: 0px;
       }
 .div2 { border: 5px solid #FF0000;
         padding: 10px;
       }
</style>
<script type="text/javascript">
 function  func() {
   var elem = document.getElementById('div1');
   var newElem = elem.cloneNode(false);
   document.body.replaceChild(newElem, elem);
 }
</script>
</head>
<body>
<div id="div1" class="div1">
     <div id="div2" class="div2"> 
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. 
     </div>
     <p>CSS</p>
     <h1>Hi oSS</h1>
</div>
<a href="#" onClick="func(); return false;"> delete child nodes </a>
</body>
</html>



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


 




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


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

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