У меня есть функция, где я создаю новый элемент в 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», я не могу использовать его для этой задачи.
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 = "";
}
}
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.