Это интересный вопрос, который я видел в сети, но не знаю ответа:AppendChild из ChildNodes не работает
Следующий код предназначен для добавления пяти одинаковых коробок, содержащих ссылки на этот документ, но не работает должным образом. Почему нет?
// Copies the contents of one box into another
function copyContents(from, to){
for(var i=0; i<=from.childNodes.length-1; i++){
to.appendChild(from.childNodes[i]); // <---- Error on this line.
}
}
//create a box to copy:
var referenceBox = document.createElement('div');
var link = document.createElement('a');
link.href = 'http://www.example.com/';
link.textContent = 'A link';
referenceBox.appendChild(link);
//Add box copies to the document
for(var i=0; i<5; i++){
var newBox = document.createElement('div');
copyContents(referenceBox, newBox);
document.body.appendChild(newBox);
}
Опции:
- to.appendChild() ожидает, HTML, но from.childNodes [я] является объектом узла, поэтому все коробки будут содержать тексты [Node Object].
- document.createElement() повторно использует существующие элементы с тем же тегом, поэтому к документу добавляется только один ящик.
- Тот же элемент ссылки не может иметь несколько родителей, поэтому только один ящик заканчивается ссылкой.
- Ссылка href связи должна быть установлена с помощью setAttribute(); установка свойства link.href ничего не сделает, поэтому ни одна из ссылок в боксах не укажет нигде.
Я думаю, что ответ 3, но не уверен и не знает почему?
Любое объяснение? Tnx
Вы не копируя, но перемещение. Обратите внимание, что * from.childNodes * - живая коллекция, так как вы перемещаете их, длина уменьшается, и вы будете перемещать только те, для которых были даже индексы (когда вы перемещаете 0, 1 перемещается в 0, поэтому, когда вы перемещаете 1 , это были предыдущие 2 и т. д.). – RobG