Получить строку-разметку элемента

326
21 июня 2017, 02:43

Можно ли как-то в javaScript/jQuery, имея сам элемент, получить строку с его html-разметкой?

Answer 1

Элемент <template> предназначен для хранения «образца» разметки, невидимого и предназначенного для вставки куда-либо.

Конечно, есть много способов записать произвольный невидимый текст в HTML. В чём же особенность <template>?

Его отличие от обычных тегов в том, что его содержимое обрабатывается особым образом. Оно не только скрыто, но и считается находящимся вообще «вне документа». А при вставке автоматически «оживает», выполняются из него скрипты, начинает проигрываться видео и т.п.

Содержимое тега <template>, в отличие, к примеру, от шаблонов или <script type="неизвестный тип">, обрабатывается браузером. А значит, должно быть корректным HTML.

Оно доступно как DocumentFragment в свойстве тега content. Предполагается, что мы, при необходимости, возьмём content и вставим, куда надо.

Вставка шаблона

Пример вставки шаблона tmpl в Shadow DOM элемента elem:

<p id="elem">
   Доброе утро, страна!
</p>
<template id="tmpl">
  <h3><content></content></h3>
  <p>Привет из подполья!</p>
  <script>
    document.write('...document.write:Новость!');
  </script>
</template>
<script>
  var root = elem.createShadowRoot();
  root.appendChild(tmpl.content.cloneNode(true));
</script>

У нас получилось, что:

  1. В элементе #elem содержатся данные в некоторой оговорённой разметке.
  2. Шаблон #tmpl указывает, как их отобразить, куда и в какие HTML-теги завернуть содержимое #elem.
  3. Здесь шаблон показывается в Shadow DOM тега. Технически, это не обязательно, шаблон можно использовать и без Shadow DOM, но тогда не сработает тег <content>.

Можно также заметить, что скрипт из шаблона выполнился. Это важнейшее отличие вставки шаблона от вставки HTML через innerHTML и от обычного DocumentFragment.

Также мы вставили не сам tmpl.content, а его клон. Это обычная практика, чтобы можно было использовать один шаблон много раз.

READ ALSO
Собирать проект при помощи webpack

Собирать проект при помощи webpack

ПриветСейчас у меня установлен npm + Babel, у которого сборка происходит при помощи npm run watch:

316
Как добавить в div несколько div&#39;ов?

Как добавить в div несколько div'ов?

Приветствую! Подскажите пожалуйста, как добавить в див несколько дивов через переборУ меня есть 9 квадратов, в них я пытаюсь добавить 9 пустых...

329
Странное поведение Javascript при передаче объекта по ссылке

Странное поведение Javascript при передаче объекта по ссылке

Написал простой пример с изменением объекта в функции при передаче по ссылкеhttps://plnkr

237
Как поменять стили при наведении на div?

Как поменять стили при наведении на div?

Приветствую! Просьба помочь, у меня есть класс "parent", который содержит класс "children", хочу сделать, что бы при наведении на парент, мой чилдрен...

215