Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.07.2015, 15:35
Интересующийся
Отправить личное сообщение для Palama Посмотреть профиль Найти все сообщения от Palama
 
Регистрация: 24.06.2015
Сообщений: 16

Непонятка с HTMLCollection
Исходное:
есть хтмл вида
<li>текст1</li>
<li>текст2</li>
.....
<li>текст3</li>


мне нужно получить его, обработать каждую строку и вставить на страничку.

скрипт.
var tmp_holder = document.createElement('div'),   // временное хранилище
      workfield = document.getElementById('workfield'); // место куда вставить
tmp_holder.innerHTML = xmlhttp.responseText;   // полученный хмтл
var Lx = tmp_holder.getElementsByTagName('LI');
for (i = 0; i < Lx.length; i++) workfield.appendChild(Lx[i]);


вывод получается вида
текст1
текст3
текст5
т.е. через один

wft?

Если скопировать мой HTMLCollection в массив из HTMLElement, то всё работает как надо, что ожидаемо.
var Nx =[];
for (i = 0; i < Lx.length; i++) Nx[i] = Lx[i];
for (i = 0; i < Nx.length; i++) workfield.appendChild(Nx[i]);



Что происходит с коллекцией при вставке элементов из неё? Куда пропадают элементы?
Ответить с цитированием
  #2 (permalink)  
Старый 27.07.2015, 15:43
Интересующийся
Отправить личное сообщение для Palama Посмотреть профиль Найти все сообщения от Palama
 
Регистрация: 24.06.2015
Сообщений: 16

а если заменить на
var Lx = tmp_holder.querySelectorAll('LI');

то всё баг исчезает.

В чем разница между getElementsByTagName(tagname) и querySelectorAll(tagname)?
Ответить с цитированием
  #3 (permalink)  
Старый 27.07.2015, 15:57
Интересующийся
Отправить личное сообщение для Palama Посмотреть профиль Найти все сообщения от Palama
 
Регистрация: 24.06.2015
Сообщений: 16

Сам же и отвечу, пока писал додумался.
appendChild перемещает элемент из коллекции, соответственно после первого мой цикл обратится к третьему элементу и length в конце цикла будет вдвое меньше, так как половина элементов будет перемещено.

Всем спасибо
Ответить с цитированием
  #4 (permalink)  
Старый 27.07.2015, 19:25
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

workfield.appendChild(Lx[i].cloneNode(true));
Ответить с цитированием
  #5 (permalink)  
Старый 27.07.2015, 20:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Palama,
for (; Lx[0];) workfield.appendChild(Lx[0]);
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какая-то непонятка со скриптом Batyabest Events/DOM/Window 1 02.10.2014 12:15
непонятка с кодом s100v Общие вопросы Javascript 4 27.12.2013 08:53
Непонятка с nextSibling pavel_martin Events/DOM/Window 9 14.04.2013 01:54
Зачем у NodeList и HTMLCollection свойство length enumerable? danik.js Общие вопросы Javascript 5 27.03.2013 11:02
непонятка с поведением броузера macexa jQuery 5 06.12.2011 11:11