Read 3 min
DOM: append vs appendChild. Що використовувати на практиці?
Для того, щоб вставити контент в HTML сторінку, нам необхідно взаємодіяти з DOM (Document Object Model) - об'єктною моделлю документа.
Для вирішення цього завдання існує цілий ряд методів, наприклад, для вставки в документ
можна використовувати методи append та appenChild.
Однак краще використовувати саме метод append разом з такими методами як:
prependbeforeafterremovereplaceWith
Замість таких методів, які вважаються застарілими. Але які все ще можна зустріти у старих скриптах:
appendChildinsertBeforereplaceChildremoveChild
Давайте розберемося в чому сенс цієї рекомендації і чому краще використовувати append замість appendChild.
"append" vs "appendChild"
append specification
appendChild specification
"appendChild"
Метод element.appendChild(node) має низку наступних особливостей:
- додає
node- DOM-елемент до кінця списку дочірніх елементів вelement. - повертає доданий елемент
node(крім випадків колиnode- цеDocumentFragment) - якщо
nodeє посиланням на існуючий елемент DOM, цей елемент буде переміщений в нову позицію
"append"
Метод element.append(...nodes or strings) має низку наступних особливостей:
- додає
nodes- DOM-елементи, або строкові значення, до кінця списку дочірніх елементів вelement - нічого не повертає (буде повернено значення
undefined) - дозволяє додати кілька DOM елементів або рядків
- якщо
nodeє посиланням на існуючий елемент DOM, цей елемент буде переміщений в нову позицію
Різниця між "append" vs "appendChild"
appendприймає як DOM-елементи так і строкові значення, в той час якappendChildтільки DOM-елементиappendдозволяє додати в DOM одразу кілька значень,appendChildдозволяє додати лише одне значенняappendнічого не повертає,appendChildповерне доданий елемент
Висновок
Перші дві відмінності роблять використання методу append більш гнучким, порівняно з методом appendChild,
через те що на практиці часто доводиться вставляти рядки або кілька елементів за раз,
а ось повернення вставленого елемента потрібно у дуже рідких випадках.
Також, з вищезгаданих відмінностей слід, що можна сміливо замінити виклик
appendChild на append без наслідків, але не навпаки.
Усі застарілі методи: insertBefore, replaceChild, removeChild, мають таку ж саму специфіку
поведінки що і appendChild:
- працюють тільки з DOM-елементами
- дозволяють вставити лише одне значення
- повертають вставлений елемент
Тому вибір на користь методів prepend, before, after, remove, replaceWith справедливий і для них.