#javascript
#javascript
Вопрос:
Почему код делает разные выходные данные, и это почти тот же ввод? Ввод:
var Add = document.getElementById('AddElement'); //the button
var Element = document.getElementById('element'); // the input text
var ListParent = document.querySelector('ul');
Add.addEventListener('click', function(){
var AddText = document.createElement('li').appendChild(document.createTextNode("hello"));
ListParent.appendChild(AddText);
})
Вывод:
первый щелчок: привет
второй щелчок: привет, привет
Input:
var Add = document.getElementById('AddElement');
var Element = document.getElementById('element');
var ListParent = document.querySelector('ul');
Add.addEventListener('click', function(){
var AddText = document.createElement('li');
AddText.appendChild(document.createTextNode('hello'));
ListParent.appendChild(AddText);
})
Вывод:
первый щелчок:
- здравствуйте
второй щелчок:
- здравствуйте
- здравствуйте
Комментарии:
1. проверьте
appendChild
, он не возвращает родительский узел.2. Потому
appendChild
что возвращает добавленный элемент, а не родительский, т. Е. Ваш первый кодAddText
— это ваш текстовый узел, а не вашli
Ответ №1:
appendChild
возвращает добавленный узел:
const div = document.createElement('div');
const parent = document.createElement('div');
const result = parent.appendChild(div);
console.log(result === div);
Поэтому, когда вы делаете
var AddText=document.createElement('li').appendChild(document.createTextNode("hello"));
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Введенное значение addText
— это созданный текстовый узел. В отличие от этого, с
var AddText = document.createElement('li');
это <li>
, а не текстовый узел.
Итак, при первом подходе созданный <li>
не используется (и, вероятно, это не то, что вы хотите).
Если вы хотите использовать <li>
и уменьшить свой код, назначьте .textContent
<li>
вместо этого.
Add.addEventListener('click', function(){
ListParent.appendChild(document.createElement('li'))
.textContent = element.value;
})