JavaScript DOMParser — розбір HTML-рядка в DOM


DOMParser перетворює рядок з HTML або XML на повноцінний документ, по якому можна ходити звичайними селекторами.

автор: NagarD

Загальний опис

Типовий випадок — сервер віддав шматок розмітки, і з нього треба дістати дані, а не вставити його на сторінку.

Звабливо кинути рядок в innerHTML тимчасового <div> — але так браузер почне вантажити ресурси: зображення, іконки, а в деяких випадках виконає обробники з атрибутів. Для чужої розмітки це відверто небезпечно.

DOMParser розбирає рядок у окремий, мертвий документ: нічого не вантажиться, нічого не виконується. Далі — querySelector як завжди.

Він же читає XML і RSS — другим аргументом передається тип.

автор: NagarD

Нотатка

Скрипти в розібраному документі не виконуються, але це не робить розмітку безпечною для вставки. Якщо ти потім кладеш її в сторінку — санітизація все одно потрібна.

автор: NagarD

Синтаксис

const doc = new DOMParser().parseFromString(html, "text/html");

методи

Метод Опис
parseFromString Створює Document із рядка розмітки.

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
DOMParser 1+ 1+ 1+ 8+ 12+ 9+
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
DOMParser yes yes yes yes

Приклади

+ запропонувати свій приклад у пісочниці

Дістати дані з чужої розмітки, нічого не завантажуючи.

const html = '<h1>Заголовок</h1><a href="/css">посилання</a>';
const doc = new DOMParser().parseFromString(html, 'text/html');

// звичайні селектори по окремому, «мертвому» документу
console.log(doc.querySelector('h1').textContent);
console.log([...doc.querySelectorAll('a')].map(a => a.getAttribute('href')));

// XML і RSS — так само
const xml = new DOMParser().parseFromString(
    '<rss><item><title>Новина</title></item></rss>',
    'text/xml'
);

console.log(xml.querySelector('title').textContent); // 'Новина'
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід