Javascript 替换元素内容的函数表示my元素为null

Javascript 替换元素内容的函数表示my元素为null,javascript,html,Javascript,Html,我有一个函数,我在一个div(“父div”)中创建一个新元素,并将其附加到一个textNode(其中包含元素的内容)。这不符合它的目标 function createElement(){ var son = document.createElement("p"); var node = document.createTextNode("some random text"); son.appendChild(node); var father = document.

我有一个函数,我在一个div(“父div”)中创建一个新元素,并将其附加到一个textNode(其中包含元素的内容)。这不符合它的目标

function createElement(){
    var son = document.createElement("p");
    var node = document.createTextNode("some random text");
    son.appendChild(node);
    var father = document.getElementById("father-div");
    father.appendChild(son);
    son.id = "son-id";
}
稍后我想更改该文本(我希望它是“”),因此我创建了这个函数,它接收我要更改的元素的id(例如:我创建的上一个“子id”)。但是我得到了这个错误:“无法读取null的属性'replaceChild'

我怎样才能让它做我想做的事情,为什么它不能识别elementId


在4“使用innerHTML”中,我无法将其用于此任务。

您正在尝试运行“将元素本身替换为文本节点”,这将不起作用。你应该真正使用innerText

function changeContent(elementId){ //examplo elementId="son-id"
    let element = document.getElementById(elementId);
    if(element){
        element.innerText = "";
    }
}
你使用了错误的语法

要替换文本节点(本例中的第一个),请使用item.childNodes[0]

其中项是“子”元素

我还建议升级此函数并添加第二个参数

function changeContent(elementId, content){
      var newText = document.createTextNode(content),
          item = document.getElementById(elementId);
      item.replaceChild(newText, item.childNodes[0]);
}

在子节点上使用索引可能不会总是产生可预测的结果,您必须确保确实要替换第0个元素。我认为问题只是关于第一个元素
var son=document.createElement(“p”);var node=document.createTextNode(“一些随机文本”);子节点。是的,最好使用.NeNHTML.原始的海报也应该考虑包装SPAN元素中的文本节点,并给每个元素一个ID,这样它们就可以以可预测的方式单独地被处理和处理。如果海报只需要擦除元素中的所有文本,则应使用innerText。是的,
replaceChild
的参数不正确,因为
newChild
不能是其自身的子节点(),但为此生成的错误消息是关于“要替换的节点不是此节点的子节点”。帖子中的错误消息是由其他出错但未在帖子中显示的内容生成的-您可以制作一个代码片段来演示如何重现它吗?
function changeContent(elementId){
      var newText = document.createTextNode(' '),
          item = document.getElementById(elementId);
      item.replaceChild(newText, item.childNodes[0]);
}
function changeContent(elementId, content){
      var newText = document.createTextNode(content),
          item = document.getElementById(elementId);
      item.replaceChild(newText, item.childNodes[0]);
}