Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当函数中存在多个时,javascript/DOM中的removeChild无法正常工作_Javascript_Ajax_Dom_Removechild - Fatal编程技术网

当函数中存在多个时,javascript/DOM中的removeChild无法正常工作

当函数中存在多个时,javascript/DOM中的removeChild无法正常工作,javascript,ajax,dom,removechild,Javascript,Ajax,Dom,Removechild,更新: 以下是JSFIDLE链接: 它似乎在JSFIDLE中不起作用,但我猜它可以显示整个代码——html、css和Js。 在使用Javascript进行DOM编辑时,我面临着一种非常奇怪的情况。我的示例代码如下。基本上,swapCells将接收两个对象,每个对象有两个子对象-一个是img元素,另一个是textNode。我想看的是removeChild的工作原理 我已经标记了所有混淆的两行。 问题#1位于sourceTD移除其子项的行上,问题#2位于从destinationTD移除最后一个子项

更新: 以下是JSFIDLE链接:

它似乎在JSFIDLE中不起作用,但我猜它可以显示整个代码——html、css和Js。 在使用Javascript进行DOM编辑时,我面临着一种非常奇怪的情况。我的示例代码如下。基本上,swapCells将接收两个对象,每个对象有两个子对象-一个是img元素,另一个是textNode。我想看的是removeChild的工作原理

我已经标记了所有混淆的两行。 问题#1位于sourceTD移除其子项的行上,问题#2位于从destinationTD移除最后一个子项的行上

让我解释一下下面的代码是如何运行的: a) 当代码中只出现问题行#1时,sourceTD子级被删除,输出表示source有一个img类型的子级;destination有2个子项——img和文本——按预期工作 b) 当代码中只存在问题行#2时,destinationTD子项将被删除,其工作方式与上述类似,如预期的那样 c) 现在的问题是,当代码中出现这两行时,它只会删除sourceTD lastChild。仅针对警报的sourceTD部分接收输出destinationTD警报不会出现,因此我无法评估目标子项是否已被删除

代码:

请让我知道,当两个问题行都存在时,为什么代码行为异常。还有,是不是有一个函数只能删除一个节点,或者只有一个removeChild可以工作。。。?????我很困惑


谢谢

当两行都在其中时,您将调用
destinationTD.removeChild(destinationTD.lastChild)两次,因此两个子项都将被删除。if语句的计算结果为false,因为
destinationTD
没有子节点,所以您不会得到任何输出-在这种情况下,缺少输出是代码正常工作的证明,而不是代码正常工作的证明。

排序->


TD的第一个子节点是换行符,而不是img元素。。。。将数字增加1,其工作正常。。。在prod环境中使用似乎有点脆弱-除非您可以控制HTML-也许可以改为使用
getelementbytagname('img')

Ahhh。。。我明白了

该问题是由于在删除后引用不再存在的子节点而创建的错误

例如,如果sourceTD有3个子节点,并且被引用为childNodes[1]和childNodes[2],那么在删除sourceTD的最后一个子节点时,就不再有childNodes[2],因为只剩下2个节点,也不再有第三个节点。由于JS中的这个错误,剩余的代码被抑制,无法运行。这就是为什么destinationTD警报也被抑制的原因

愚蠢的引用


感谢大家,特别是@ManseUK提供的所有帮助

也许还可以使用并包含您的HTML。。。那将help@ManseUK我已经将jsfiddle链接添加到问题()@RobG更新了您的jsfiddle-->==um。。很抱歉,但它似乎没有如我预期的那样起作用。您可以查看一下前面提到的sourcTD和DestinationTD removeChild,但我看到代码只针对sourcTD警报集运行。有什么用?@arunnair那是因为它被移除了!
function swapCells(sourceTD, destinationTD){

//line below is issue line#1 
sourceTD.removeChild(sourceTD.lastChild);  

//line below is issue line#2
destinationTD.removeChild(destinationTD.lastChild);

    if(sourceTD.hasChildNodes()){
        alert("Source has: " + sourceTD.childNodes.length);
        alert(sourceTD.childNodes[0].alt); 
        alert(sourceTD.childNodes[1].nodeName); 
    }
destinationTD.removeChild(destinationTD.lastChild);
    if(destinationTD.hasChildNodes()){
        alert("Destination has: " + destinationTD.childNodes.length);
        alert(destinationTD.childNodes[0].alt); 
        alert(destinationTD.childNodes[1].nodeName); 
    }
}