【问题标题】:Error trying to overlay and remove elements with removeChild尝试使用 removeChild 覆盖和删除元素时出错
【发布时间】:2021-11-09 05:15:09
【问题描述】:

下面的代码sn-p有问题。

for (var i=0;i<data.parlist.length;i++){
            var inp = document.createElement("input")
            var label = document.createElement("label")
            var labelValue = document.createElement("label")
            var subDiv = document.createElement("div")
            var br = document.createElement("br")
            try{
                var dBtn = document.getElementById(data.parlist[i].id);
                var dLabel = document.getElementById(data.parlist[i].id + " label")
                
                var dDiv = document.getElementById(data.parlist[i].id +" div");

                var inprad = document.getElementById(data.parlist[i].id+" inp_rad");
                var dLabelRad = document.getElementById(data.parlist[i].id + " label_rad")

                var dSubDiv = document.getElementById(data.parlist[i].id +" div_rad");

                dSubDiv.replaceChild(inprad);
                dSubDiv.removeChild(dLabelRad);

                dDiv.removeChild(dSubDiv);
                
                dDiv.removeChild(dBtn);
                dDiv.removeChild(dLabel);
                
                myDiv.removeChild(dDiv);
                
            }catch{
                console.log("no")
            }

这个for循环在一个函数里面,当点击一个站的按钮时会显示参数。这样:

您在图片中看到的内容有效,但我来try 澄清的问题是,当我按下按钮时,例如 station 1 出现在图片中,然后我按下 station 2 的按钮示例 应该你必须删除以前的参数 removeChild 不起作用,station 1 的参数保留在div 和 station 2 的参数被添加到下面而不是被删除

try 中有一个问题,但我不知道它是什么,我这样说是因为当我检查页面并打开 控制台 时,我收到了我留在catch 一个“不”

感谢您阅读我的问题,欢迎提出任何建议,因为我迫切希望找到解决方案。

【问题讨论】:

  • 将您的捕获更改为catch (e) { console.log(e) } 并检查控制台。
  • 您缺少分号。
  • 这是catch出现的错误,多次出现:TypeError: dSubDiv is null parlist http://localhost/js/sConnetion.js:94 jQuery 8 parlist http://localhost/js/sConnetion.js:63 onclick http://localhost/js/sConnetion.js:49 EventHandlerNonNull* http://localhost/js/sConnetion.js:47 jQuery 8 &lt;anonymous&gt; http://localhost/js/sConnetion.js:37
  • 现在这个TypeError: Node.removeChild: Argument 1 is not an object.

标签: javascript for-loop button try-catch removechild


【解决方案1】:

您需要将 2 个输入传递给 replaceChild 函数。

parentNode.replaceChild(newChild, oldChild);

更多信息请参考Mozilla docs here

这里有一些额外的建议

  1. 当您登录调试时,请使用一些有意义的消息。在你的情况下,你可以这样做
try {
 ...
} catch (err) {
   console.log(err);
}
  1. 对于data.parlist 中的内容以及是否正确实施,这些问题尚不清楚。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 2018-08-20
    • 2019-05-12
    • 1970-01-01
    相关资源
    最近更新 更多