Непонятка с 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, время: 20:58. |