2011-04-14 82 views
2

正如你所看到的,我仍然是一个JavaScript的新手 为什么它只能追加一次Textnode?当你再次将其添加到其他地方时,第一个消失appendChild数组只附加到最后一个元素

我不需要问题的解决方案我只是好奇是什么导致了这种行为。 例子,其中textnode只添加到阵列中的最后一个元素:

function hideAdd(){ 
    var hide = document.createTextNode('Afbeelding verbergen'); 
    var afb = collectionToArray(document.getElementsByTagName('img')); 
    afb.pop(); 
    var divs = []; 
    for (i=0; i < afb.length; i++){ 
     divs.push(afb[i].parentNode); 

    } 
    console.log(divs); 
    for (i = 0; i < divs.length;i++){ 
     divs[i].appendChild(hide);  
    } 
} 

这是您使用的唯一textnode所以它的工作原理:

function hideAdd(){ 
    var hide = [] 
    var afb = collectionToArray(document.getElementsByTagName('img')); 
    afb.pop(); 
    var divs = []; 
    for (i=0; i < afb.length; i++){ 
     divs.push(afb[i].parentNode); 
     hide[i] = document.createTextNode('Afbeelding verbergen'); 

    } 
    console.log(divs); 
    for (i = 0; i < divs.length;i++){ 
     divs[i].appendChild(hide[i]);  
    } 
} 

回答

2

简短的回答是DOM是树,而不是一个网络。每个节点只能有一个父节点。如果您可以在多个位置添加一个节点,则它将具有多个父级。

+0

好吧,我现在看到。如果我没有将createTextNode放入一个变量中(甚至不确定是否可以在没有var的情况下执行它),它会起作用。但是因为我一直使用相同的变量,所以它总是改变父节点。 谢谢你的教育回应。 – Jarco 2011-04-14 14:00:32

+0

是的,没有理由不能继续创建新节点并添加它们。 – 2011-04-14 14:03:01