Spec-Zone.ru › Web APIs

Элемент: свойство shadowRoot

Базовая Широко доступная

Эта функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с января 2020 года.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Свойство Element.shadowRoot — только для чтения, оно представляет собой теневой корень, размещённый в элементе.

Используйте Element.attachShadow(), чтобы добавить теневой корень к существующему элементу.

Значение

Экземпляр объекта ShadowRoot, или null, если связанный теневой корень был присоединён с mode, установленным в closed. (См. Element.attachShadow() для получения дополнительной информации).

Примеры

Следующие фрагменты взяты из нашего примера life-cycle-callbacks (посмотреть в живую), который создаёт элемент, отображающий квадрат заданного размера и цвета, указанных в атрибутах элемента.

Внутри определения класса элемента <custom-square> мы включаем некоторые жизненные циклы обратных вызовов, которые вызывают внешнюю функцию updateStyle(), которая фактически применяет размер и цвет к элементу. Вы увидите, что мы передаём ей this (сам пользовательский элемент) в качестве параметра.

class Square extends HTMLElement {
  connectedCallback() {
    console.log("Custom square element added to page.");
    updateStyle(this);
  }

  attributeChangedCallback(name, oldValue, newValue) {
    console.log("Custom square element attributes changed.");
    updateStyle(this);
  }
}

В самой функции updateStyle() мы получаем ссылку на теневой DOM с помощью Element.shadowRoot. Отсюда мы используем стандартные методы обхода DOM, чтобы найти элемент <style> внутри теневого DOM и затем обновить найденный в нём CSS:

function updateStyle(elem) {
  const shadow = elem.shadowRoot;
  const childNodes = Array.from(shadow.childNodes);

  childNodes.forEach((childNode) => {
    if (childNode.nodeName === "STYLE") {
      childNode.textContent = `
        div {
          width: ${elem.getAttribute("l")}px;
          height: ${elem.getAttribute("l")}px;
          background-color: ${elem.getAttribute("c")};
        }
      `;
    }
  });
}

Спецификации

Спецификация
DOM
# ref-for-dom-element-shadowroot①

Совместимость с браузерами

Рабочий стол Мобильный
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
shadowRoot 35 79 63 22 10 35 63 22 10 3.0 37

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Element/shadowRoot

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API