Непонятка с 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? :-E Если скопировать мой 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]); Что происходит с коллекцией при вставке элементов из неё? Куда пропадают элементы? |
а если заменить на
var Lx = tmp_holder.querySelectorAll('LI');
то всё баг исчезает. В чем разница между getElementsByTagName(tagname) и querySelectorAll(tagname)? |
Сам же и отвечу, пока писал додумался.
appendChild перемещает элемент из коллекции, соответственно после первого мой цикл обратится к третьему элементу и length в конце цикла будет вдвое меньше, так как половина элементов будет перемещено. Всем спасибо :) |
workfield.appendChild(Lx[i].cloneNode(true));
|
Palama,
for (; Lx[0];) workfield.appendChild(Lx[0]); |
| Часовой пояс GMT +3, время: 17:18. |