Как использовать HTML & с Shadow DOM
HTML-слот это один из самых замечательных стандартов W3C. Объедините это с другим впечатляющим стандартом W3C шаблоны, и у вас есть невероятная смесь для работы. Быть способным создавать и добавлять элементы HTML на страницу используя JavaScript это необходимая и важная задача.
Это полезно, когда фрагмент кода должен появляются только в определенное время, или когда вы не хотите набирать сотни одинаково структурированных HTML-элементов, но хотите автоматизировать процесс.
Создание HTML-элементов в JavaScript - это не очень желательно. Это хлопотно, чтобы проверить и перепроверить, если вы покрыли все теги, расположили их в правильном порядке, в общем, просто тоже много печатать и отслеживать. Эта суматоха, однако, получил решение когда тег появился. Если что-то должно быть добавляется на страницу динамически, Вы можете положить его внутри
элемент.
В этом посте я покажу вам, как вы можете использовать
а также теги вместе с JavaScript для создать мини-фабрику таблиц HTML которые могут создавать и заполнять сотни подобных таблиц.
а также
теги
тег содержит HTML-код, который не будет отображаться браузерами пока он не будет правильно добавлен в документ, используя JavaScript.
тег является заполнитель, который вы добавляете в Shadow DOM который может быть сделан из содержания элемент.
Shadow DOM похож на обычный DOM (модель документа анализируется из HTML). Это создает дерево с областями видимости (дерево Shadow DOM), которое имеет корень сам по себе а также может иметь собственный стиль.
Когда вы вставляете дерево Shadow DOM в элемент в основном документе - этот элемент будет называться теневой хозяин -, все дочерние элементы теневого хоста, помеченные слот
атрибут (не совпадает с вышеупомянутым
тег) будет занять свое место во вновь вставленном поддереве.
Shadow DOM, на момент написания этой статьи (июль 2017 г.), поддерживается только в браузерах на базе WebKit и Blink но вы можете проверить фактическое состояние поддержки браузера на CanIUse в любое время.
Настройка HTML
Все еще сбиваете с толку? Давайте посмотрим код, начиная с элемент.
внутри Внутри шаблона, Я также добавил некоторые основные стили для таблицы, используя Вне шаблона, есть два каждый Прямо сейчас все, что вы можете увидеть на странице, это текстовые строки, содержащиеся в пролетах, поэтому нам нужно добавить также немного JavaScript. Используя Javascript, мы вставляем таблицу из шаблона в оба div как дерево Shadow DOM. После вставки пролеты помещаются в соответствующие слоты внутри таблицы и отображают нужные заголовки столбцов или значения ячеек. Результат будет две автоматически сгенерированные таблицы которые используют тот же шаблон. Во-первых, нам нужно проверить, поддерживается ли Shadow DOM в браузере пользователя. Мы создаем пользовательскую переменную с именем Внутри Есть два Тогда мы добавить копию содержимого шаблона к дереву Shadow DOM, используя И наши динамические таблицы HTML готовы, вот как выглядит вывод в Chrome:, есть
Что ж использовать в качестве плана за создание нескольких таблиц это будет добавлено в документ. Есть
элементы внутри ячеек таблицы ( а также ) выступая в качестве заполнителей для заголовков столбцов и значений ячеек. Каждый слот имеет уникальный название
приписывать это идентифицирует это.
тег.
, для двух отдельных таблиц мы хотим добавить на страницу.
элемент имеет
слот
атрибут какого значения равный название
значение их соответствующих
тег внутри .
Присоединение дерева Shadow DOM
attachShadow ()
метод присоединяет Shadow DOM-дерево к элементу и возвращает корневой узел этого дерева Shadow DOM. если
условие в приведенном ниже коде проверяет, поддерживает ли браузер этот метод, проверяя, имеют ли элементы div на странице attachShadow
метод. // проверяем, поддерживается ли Shadow DOM if ('attachShadow' в document.createElement ('div')) else console.warn ('attachShadow не поддерживается');
templateContent
тот служит ссылкой к содержанию шаблона. if ('attachShadow' в document.createElement ('div')) let templateContent = document.querySelector ('template'). content; let divs = document.querySelectorAll ('div'); divs.forEach (function (div) // внутри цикла); else console.warn ('attachShadow не поддерживается');
для каждого
цикл, Shadow DOM дерево прикреплен к каждому div (div.attachShadow (mode: 'open')
).Режим
опции за attachShadow
: открыть
а также закрыто
. Если закрыто
был выбран корневой узел дерева Shadow DOM станет недоступным снаружи DOM-элементов и объектов.templateContent.cloneNode (правда)
метод. if ('attachShadow' в document.createElement ('div')) let templateContent = document.querySelector ('template'). content; let divs = document.querySelectorAll ('div'); divs.forEach (function (div) div.attachShadow (mode: 'open'). appendChild (templateContent.cloneNode (true)))); else console.warn ('attachShadow не поддерживается');