У меня есть функция, где я создаю новый элемент в 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";
}

Позже я хочу изменить этот текст (я хочу, чтобы он был ''), поэтому я сделал эту функцию, которая получает идентификатор элемента, который я хочу изменить (пример: предыдущий "идентификатор сына", который я создал). Однако я получаю эту ошибку: «Не удается прочитать свойство« replaceChild »из NULL».

function changeContent(elementId){ //examplo elementId="son-id"
    var newText = document.createTextNode('');
    var newChild = document.getElementById(elementId);
    newChild.replaceChild(newText, newChild);
}

Как я могу заставить его делать то, что я хочу, и почему это не распознает elementId?

inb4 «Использовать innerHTML», я не могу использовать его для этой задачи.

-1
Ana moreira

2 ответа

Вы используете неправильный синтаксис

Чтобы заменить текстовый узел (первый в данном случае) используйте item.childNodes [0]

где элемент "сын" элемент

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]);
}

Вы пытаетесь выполнить замену самого элемента текстовым узлом, который не будет работать. Вы должны действительно использовать innerText;

function changeContent(elementId){ //examplo elementId="son-id"
    let element = document.getElementById(elementId);
    if(element){
        element.innerText = "";
    }
}
58549909