appendChild + createElement

Что является различием между:

var div = document.createElement('div');//output -> [object HTMLDivElement]

document.getElementById('container').appendChild(div);

и:

var div = '<div></div>';

document.getElementById('container').appendChild(div);//output -> <div></div>

Разве оба не должны быть тем же? И в противном случае как я заставляю вторую версию работать?

17
задан Dave 21 March 2018 в 16:31
поделиться

4 ответа

Последний - это просто строка, содержащая HTML, а первая - объект. Для первого вам понадобится appendChild , а для второго вам нужно добавить к innerHTML .

не должны ли оба быть одинаковыми? и если нет, как мне получить вторую версию работать?

var div = '<div></div>';
document.getElementById('container').innerHTML += div;
30
ответ дан 30 November 2019 в 11:03
поделиться

appendChild ожидает элемент, поэтому, когда вы отправляете ему текст, он не знает, что делать. Возможно, вы захотите изучить использование библиотеки javascript, чтобы облегчить эту работу, например jQuery. Ваш код будет выглядеть так:

$('#container').append('<div></div>');
2
ответ дан 30 November 2019 в 11:03
поделиться

appendChild действительно ожидает HTMLDomNode какого-то типа, например HTMLDivElement, а не строку. Он не знает, как работать со строкой. Вы можете сделать

document.getElementById('container').innerHTML += div;

но я действительно предпочитаю первую версию; и я бы больше полагался на то, что она будет вести себя одинаково во всех браузерах.

4
ответ дан 30 November 2019 в 11:03
поделиться

В вашем JS/DOM движке вызов Element.appendChild с строкой в качестве аргумента приводит к созданию нового Text узла, который затем добавляется.

Ваш первый пример создает элемент

. Ваш второй пример создает узел text с
в качестве его содержимого.

Ваш второй пример эквивалентен:

var div = '<div></div>';

document.getElementById('container').appendChild(document.createTextNode(div));//output -> <div></div>

Как Sarfraz Ahmed упомянул в своем ответе, вы можете заставить второй пример работать так, как вы хотите, написав:

var div = '<div></div>';

document.getElementById('container').innerHTML = div;
8
ответ дан 30 November 2019 в 11:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: