CreateElement: примеры (JAVASCRIPT)

Динамическое создание элементов через createElement в JavaScript
Раздел: DOM, Создание элементов
createElement(tagName: string, options?: ElementCreationOptions): HTMLElement

Основы работы с createElement

Метод document.createElement() создает новый HTML-элемент, указанный по имени тега. Применяется для динамического добавления элементов на страницу, когда невозможно или нецелесообразно использовать статическую разметку.

Синтаксис: document.createElement(tagName) или document.createElement(tagName, options).

Аргументы:

  • tagName (обязательный): строка, указывающая тип создаваемого элемента. Для HTML-документа имя тега не чувствительно к регистру.
  • options (опциональный): объект с единственным свойством is. Используется для создания пользовательских встроенных элементов, соответствующих спецификации Custom Elements.

Возвращаемое значение: новый HTML-элемент (объект типа HTMLElement или более конкретного типа, например, HTMLDivElement). Созданный элемент находится в памяти (отсоединен от DOM-дерева) и не отображается на странице до явного добавления.

Простые примеры создания элементов

Создание стандартного элемента div.

const div = document.createElement('div');
div.textContent = 'Новый блок';
console.log(div.outerHTML);
<div>Новый блок</div>

Создание элемента с дополнительными атрибутами.

const img = document.createElement('img');
img.src = 'photo.jpg';
img.alt = 'Изображение';
console.log(img.outerHTML);
<img src="photo.jpg" alt="Изображение">

Использование параметра options для создания кастомного элемента.

const customElem = document.createElement('div', { is: 'my-widget' });
console.log(customElem.getAttribute('is'));
my-widget

Альтернативные методы JavaScript

Для создания элементов также применяются:

  • innerHTML и outerHTML: позволяют задавать HTML-строку. Могут быть уязвимы для XSS-атак и менее производительны при множественных операциях.
  • insertAdjacentHTML(): вставляет HTML-строку в указанную позицию относительно элемента. Безопаснее innerHTML, но тоже парсит строку.
  • cloneNode(): клонирует существующий элемент. Полезен для создания множества одинаковых элементов из шаблона.
  • Шаблонные теги <template>: хранят фрагменты HTML, которые можно клонировать и вставлять. Самый безопасный и производительный способ для сложных повторяющихся структур.

Распространенные ошибки

Забывают добавить элемент в DOM.

const elem = document.createElement('p');
elem.textContent = 'Текст';
// Элемент создан, но не виден на странице
(Элемент отсутствует в документе)

Некорректное имя тега вызывает исключение.

const elem = document.createElement('');
// или
document.createElement('12div');
Uncaught DOMException: Failed to execute 'createElement' on 'Document': The tag name provided ('') is not a valid name.

Путаница между свойством textContent и innerHTML при добавлении текста.

const div = document.createElement('div');
div.innerHTML = '<strong>Жирный</strong> текст';
console.log(div.textContent);
Жирный текст

Современные изменения

Добавлен второй аргумент options для поддержки кастомных встроенных элементов (Customized Built-in Elements). Это позволяет создавать элементы, расширяющие встроенные HTML-теги.

Пример с использованием класса, расширяющего HTMLParagraphElement:

class WordCount extends HTMLParagraphElement {
  constructor() {
    super();
  }
}
customElements.define('word-count', WordCount, { extends: 'p' });
const p = document.createElement('p', { is: 'word-count' });

Расширенные примеры использования

Создание элемента с обработчиком события.

Пример javascript
const btn = document.createElement('button');
btn.textContent = 'Нажми';
btn.addEventListener('click', () => alert('Клик!'));
document.body.append(btn);

Формирование сложной структуры.

Пример javascript
const list = document.createElement('ul');
for (let i = 1; i <= 3; i++) {
  const item = document.createElement('li');
  item.textContent = `Пункт ${i}`;
  list.append(item);
}
console.log(list.outerHTML);
<ul><li>Пункт 1</li><li>Пункт 2</li><li>Пункт 3</li></ul>

Создание элемента SVG.

Пример javascript
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
svg.setAttribute('width', '100');
svg.setAttribute('height', '100');
const circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');
circle.setAttribute('cx', '50');
circle.setAttribute('cy', '50');
circle.setAttribute('r', '40');
circle.setAttribute('fill', 'red');
svg.appendChild(circle);

Использование DocumentFragment для пакетного добавления.

Пример javascript
const fragment = document.createDocumentFragment();
for (let i = 0; i < 100; i++) {
  const div = document.createElement('div');
  div.textContent = `Элемент ${i}`;
  fragment.append(div);
}
document.body.append(fragment);

Создание элементов в других языках

Python (библиотека xml.etree.ElementTree для XML):

import xml.etree.ElementTree as ET
elem = ET.Element('div', attrib={'class': 'box'})
elem.text = 'Текст'
print(ET.tostring(elem, encoding='unicode'))
<div class="box">Текст</div>

PHP (DOMDocument):

$dom = new DOMDocument();
$div = $dom->createElement('div', 'Контент');
$div->setAttribute('id', 'main');
echo $dom->saveHTML($div);
<div id="main">Контент</div>

Отличия: в JavaScript элемент автоматически связан с документом, но не прикреплен к DOM. В других языках обычно требуется явно создать документ и задать его корнем.

JS createElement function comments

En
CreateElement Creates an HTML element with the specified tag name.