Мастер-классы по Javascript Екатеринбург Ростов-на-Дону Москва Узнать больше...
Содержание (скрыть) Содержание (показать)

Длина коллекции после удаления элементов

Вот небольшой документ:

<ul id="menu">
  <li>Главная страница</li>
  <li>Форум</li>
  <li>Магазин</li>
</ul>

1. Что выведет следующий код (простой вопрос)?

var lis = document.body.getElementsByTagName('li');

document.body.innerHTML = '';

alert(lis.length);

2. А такой код (вопрос посложнее)?

var lis = document.getElementById('menu').getElementsByTagName('li');

document.body.innerHTML = '';

alert(lis.length);

Решение
Решение

1. Ответ на первый вопрос - 0, пустая коллекция.

<ul id="menu">
  <li>Главная страница</li>
  <li>Форум</li>
  <li>Магазин</li>
</ul>
<script>
var lis = document.body.getElementsByTagName('li');
document.body.innerHTML = '';
alert(lis.length);
</script>

Это потому, что все элементы из BODY удаляются, а коллекция - живая.

2. Ответ на второй вопрос - 3, коллекция не изменилась:

<ul id="menu">
  <li>Главная страница</li>
  <li>Форум</li>
  <li>Магазин</li>
</ul>
<script>
var lis = document.getElementById('menu').getElementsByTagName('li');
document.body.innerHTML = '';
alert(lis.length);
</script>

В отличие от предыдущего примера, теперь коллекция привязана не к BODY, а к элементу, в котором идет поиск, т.е. к <ul id="menu">.

Присвоение document.body.innerHTML='' удаляет узлы из document.body, почему же они остались в коллекции?

Дело в том, что удаленные узлы остаются «в живых» до тех пор, пока есть ссылка на них из какого-нибудь объекта или переменной.

В данном случае к узлу <ul id="menu"> привязана коллекция, на которую ссылается переменная lis:

lis -> коллекция -> узел <ul id="menu">

Поэтому узел UL остается в памяти, и все потомки в месте с ним. Как следствие, длина коллекции по-прежнему равна 3.

#355
Наверх

Реклама

Нашли опечатку?

Нашли опечатку на сайте? Что-то кажется странным?
Выделите соответствующий текст и нажмите Ctrl+Enter!

Последние Комментарии

Помоги другим!

Помоги другим узнать о хорошей статье!