при взятии innerHTML идём по нодам от firstChild по nextSibling, а не используем childNodes, т.к. childNodes не всегда соответствует реальной структуре дочерних нод