У меня есть функция, в которой я создаю новый элемент в 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";
}
Позже я хочу изменить этот текст (я хочу, чтобы это был ""), поэтому я сделал эту функцию, которая получает идентификатор элемента, который я хочу изменить (пример: предыдущий "son-id", который я создал). Однако я получаю эту ошибку: «Не удается прочитать свойство replaceChild, равное нулю».
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]
Где item - это элемент "сын"
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]);
}
var son = document.createElement("p"); var node = document.createTextNode("some random text"); son.appendChild(node);
. Да, лучше использовать .innerHTML
Вы пытаетесь запустить замену самого элемента текстовым узлом, это не сработает. Вам действительно стоит использовать innerText;
function changeContent(elementId){ //examplo elementId="son-id"
let element = document.getElementById(elementId);
if(element){
element.innerText = "";
}
}
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.
replaceChild
неверны, потому чтоnewChild
не может быть дочерним элементом самого себя (см. Документацию), но сгенерированное для этого сообщение об ошибке говорит о том, что" заменяемый узел не является дочерним по отношению к этому узлу. ". Сообщение об ошибке в сообщении создается чем-то еще, что пошло не так, но не показано в сообщении - можете ли вы сделать фрагмент кода, чтобы продемонстрировать, как его воспроизвести?