DrunkMaster
@DrunkMaster

Почему не добавляется заготовленный блок?

Так работает https://jsfiddle.net/w0m89w3e/
Так не работает https://jsfiddle.net/op488m49/
Ошибка:
Uncaught ReferenceError: new_b is not defined at HTMLDivElement.add.onclick

(ругается на строку new_b)

HTML
<div id="add">Добавить блок</div>
<div id="new_b"></div>

JS в первом случае:
var div = '';
add.onclick = function() {
    var div = document.createElement('div');
    div.className = "alert";
    div.id = "vv";
    div.innerHTML = "<strong>Да!</strong> ";
    new_b.appendChild(div);
};

JS в во втором:
add.onclick = function() {
    var div = '<div id="a"><p class="my">текст</p></div>'
    new_b.appendChild(div);
};

Что делать если в новый блок надо загрузить довольно сложную конктрукцию с несколькими вложенными уровнями?
  • Вопрос задан
  • 501 просмотр
Решения вопроса 2
Stalker_RED
@Stalker_RED
Эм... вообще-то там другая ошибка:
Uncaught TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.
at HTMLDivElement.add.onclick ((index):48)
Это потому, что div у вас в виде строки, а ожидается Node.

Сложную конструкцию быстрее всего загружать при помощи innerHTML. А зачастую не только быстрее, но и проще.
Ответ написан
@RidgeA
у меня ошибка другая
Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.

что, в принципе, логично
https://www.w3.org/TR/DOM-Level-3-Core/core.html#I...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Для добавления к элементу нераспаршенного html существует insertAdjacentHTML
add.onclick = function() {
    var div = '<div id="a"><p class="my">текст</p></div>'
    new_b.insertAdjacentHTML('beforeend', div);
};
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы