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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DOM: удалить все дочерние узлы, Не удаляются все узлы 
V
    Опции темы
FiMa1
  Дата 15.6.2009, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 6



Ребята, привет всем! Взгляните, пожалуйста, на код и помогите решить проблему.

Код html:
Код

<script type="text/javascript" src="/funcs.js"></script>
<div id="form" style="background:#d4d0c8;width:230px;padding:2px 0 2px 15px">
    <h3>Login Form</h3>
    <p><input id="login" name="login" type="text" size="20" /> login</p>
    <p><input id="password" name="password" type="password" size="20" /> password</p>
    <p><input type="button" value="Отправить" onclick="submitLoginForm();"/></p>
</div>
<a href="#" onClick="drawLoginForm();">Login</a>
<a href="#" onClick="removeAllChilds(document.getElementById('form'));">Registration</a>

Код javascript (funcs.js):
Код

function removeAllChilds(el) {
    if (el != null) {
        if (el.childNodes) {
            for (var i = 0; i < el.childNodes.length; ++i) {
                 el.removeChild(el.childNodes[i]);
            }
        }
    }
}

Собственно, когда жму ссылку Registration, ожидаю удаления всех дочерних узлов элемента div 'form', на практике же не удаляются следующие узлы (проверено в IE6, FF3, Opera):
Код

<input id="login" name="login" type="text" size="20" /> login</p>
и 
Код

<p><input type="button" value="Отправить" onclick="submitLoginForm();"/></p>

Если кто-нибудь знает в чем беда, подскажите.

Это сообщение отредактировал(а) FiMa1 - 15.6.2009, 15:00
PM   Вверх
Astraller
Дата 15.6.2009, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 1.8.2007
Где: $Украина[Кры м]->Феодосия

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



Проблема тут:
Код

for (var i = 0; i < el.childNodes.length; ++i) {

Фактически, когда вы удаляете первый элемент, их становится на 1 меньше. Но цикл продолжает работать, и удаляет второй элемент (вместо элемента ставшего первым), третий... и т.д.

Правильно будет работать такой код:
Код

while(el.childNodes[0]){
  el.removeChild(el.childNodes[0]);
}


Это сообщение отредактировал(а) Astraller - 15.6.2009, 15:08


--------------------
A.S.T.R.A.L.L.E.R.: Artificial Synthetic Technician Responsible for Assassination, Logical Learning and Efficient Repair
PM MAIL WWW ICQ   Вверх
FiMa1
Дата 15.6.2009, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 6



Цитата(Astraller @ 15.6.2009,  15:07)
Проблема тут:
Код

for (var i = 0; i < el.childNodes.length; ++i) {
Фактически, когда вы удаляете первый элемент, их становится на 1 меньше. Но цикл продолжает работать, и удаляет второй элемент (вместо элемента ставшего первым), третий... и т.д.[/code]

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


 




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


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

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