2015-02-24 34 views
-3

我正在使用下面的代码来交换两个元素数组。在最后一次迭代中,它抛出了NodeNotFound错误。Javascript错误:replaceChild - 找不到节点

for (x=0; x<resultArr.length; x++) {  
     //allTR[x].swapNode(colArr[resultArr[x]]) 
     swapNodes(allTR[x],colArr[resultArr[x]]); 
    } 
    function swapNodes(item1,item2) 
    { 
     var itemtmp = item1.cloneNode(1); 
     var parent = item1.parentNode; 
     item2 = parent.replaceChild(itemtmp,item2); 
     parent.replaceChild(item2,item1); 
     parent.replaceChild(item1,itemtmp); 
     itemtmp = null; 
    } 

当我在调试投萤火虫,最后一次迭代过程中,当我悬停在swapNodes的第二线的功能item1.parentNode被显示为空。然后item2 = parent.replaceChild(itemtmp,item2)执行得很好。 下一行将引发控制台中的异常,但预期的功能运行良好。

我必须使工作的功能没有此脚本错误。请帮我解决这个问题。

+0

根据错误和debuggin产生的父(或者项目本身)为null或undefined ...提供更多的代码,otherweise它不可能帮助你...... – 2015-02-24 09:00:21

+0

@MarvinEmilBrach在最后一次迭代,item1有价值。但是当我悬停item1.parentNode时,单独的parentNode显示为空。我如何处理这种情况 – 2015-02-24 09:18:57

回答

0

我做了下面的代码更改,并且功能运行良好,没有脚本错误。

function swapNodes(a, b){ 
     var pa1= a.parentNode, pa2= b.parentNode, sib= b.nextSibling; 
     if(sib=== a) sib= sib.nextSibling; 
     pa1.replaceChild(b, a); 
     if(sib) pa2.insertBefore(a, sib); 
     else pa2.appendChild(a); 
     return true; 
    }