ShadowRoot
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
* Some parts of this feature may have varying levels of support.
Giao diện ShadowRoot của Shadow DOM API là nút gốc của một cây con DOM được hiển thị riêng biệt với cây DOM chính của tài liệu.
Bạn có thể lấy tham chiếu đến shadow root của một phần tử bằng thuộc tính Element.shadowRoot, với điều kiện nó được tạo bằng Element.attachShadow() và tùy chọn mode được đặt thành open.
Thuộc tính thể hiện
ShadowRoot.activeElementRead only-
Trả về
Elementbên trong cây shadow đang có tiêu điểm. ShadowRoot.adoptedStyleSheets-
Thêm một mảng các stylesheet được tạo sẵn để cây con shadow DOM sử dụng. Các stylesheet này có thể được chia sẻ với các cây con DOM khác có cùng nút cha
Document, và với chính tài liệu. ShadowRoot.clonableRead only-
Giá trị boolean cho biết shadow root có thể sao chép được hay không.
ShadowRoot.customElementRegistryRead only-
Trả về đối tượng
CustomElementRegistryliên kết với shadow root này, hoặcnullnếu chưa được đặt. ShadowRoot.delegatesFocusRead only-
Giá trị boolean cho biết shadow root có ủy quyền tiêu điểm hay không khi một nút không thể nhận tiêu điểm được chọn.
ShadowRoot.fullscreenElementRead only-
Phần tử hiện đang ở chế độ toàn màn hình cho cây shadow này.
ShadowRoot.hostRead only-
Trả về tham chiếu đến phần tử DOM mà
ShadowRootđược gắn vào. ShadowRoot.innerHTML-
Đặt hoặc trả về cấu trúc DOM bên trong
ShadowRoot. ShadowRoot.modeRead only-
Chế độ của
ShadowRoot, hoặcopenhoặcclosed. Điều này xác định các tính năng nội bộ của shadow root có thể truy cập từ JavaScript hay không. ShadowRoot.pictureInPictureElementRead only-
Trả về
Elementbên trong cây shadow đang được trình bày ở chế độ picture-in-picture. ShadowRoot.pointerLockElementRead only-
Trả về
Elementđược đặt làm đích cho các sự kiện chuột khi con trỏ bị khóa.nullnếu đang chờ khóa, con trỏ chưa được khóa, hoặc đích nằm trong cây khác. ShadowRoot.referenceTargetExperimental Non-standard-
Một giá trị chuỗi có thể null, biểu thị đích hiệu lực của mọi tham chiếu phần tử được tạo đối với shadow host từ bên ngoài host element. Giá trị này phải là ID của một phần tử bên trong shadow DOM. Nếu được đặt, các tham chiếu đích đến host element từ bên ngoài shadow DOM sẽ khiến phần tử đích được tham chiếu trở thành đích hiệu lực của tham chiếu đến host element.
ShadowRoot.serializableRead only-
Giá trị boolean cho biết shadow root có thể tuần tự hóa hay không. Một shadow root có thể tuần tự hóa bên trong một phần tử sẽ được tuần tự hóa bởi
Element.getHTML()hoặcShadowRoot.getHTML()khi tham sốoptions.serializableShadowRootsđược đặt thànhtrue. Giá trị này được thiết lập khi shadow root được tạo. ShadowRoot.slotAssignmentRead only-
Trả về một chuỗi chứa kiểu gán slot, hoặc
manualhoặcnamed. ShadowRoot.styleSheetsRead only-
Trả về một
StyleSheetListgồm các đối tượngCSSStyleSheetcho các stylesheet được liên kết trực tiếp hoặc nhúng vào cây shadow.
Phương thức thể hiện
ShadowRoot.getAnimations()-
Trả về một mảng gồm tất cả các đối tượng
Animationhiện đang có hiệu lực, mà phần tử đích của chúng là các phần tử hậu duệ của cây shadow. ShadowRoot.getSelection()Non-standard-
Trả về một đối tượng
Selectionbiểu thị vùng văn bản được người dùng chọn, hoặc vị trí hiện tại của con trỏ nhập liệu. ShadowRoot.elementFromPoint()Non-standard-
Trả về phần tử ở vị trí cao nhất tại tọa độ được chỉ định.
ShadowRoot.elementsFromPoint()Non-standard-
Trả về một mảng gồm tất cả các phần tử tại tọa độ được chỉ định.
ShadowRoot.setHTML()Experimental-
Cung cấp một phương thức an toàn trước XSS để phân tích cú pháp và làm sạch một chuỗi HTML thành một
DocumentFragment, rồi fragment đó thay thế cây hiện có trong shadow DOM. ShadowRoot.setHTMLUnsafe()-
Phân tích cú pháp một chuỗi HTML thành một document fragment mà không làm sạch, rồi fragment đó thay thế cây con gốc của shadow root. Chuỗi HTML có thể bao gồm các declarative shadow root, chúng sẽ được phân tích thành các phần tử template khi HTML được thiết lập bằng
ShadowRoot.innerHTML.
Sự kiện
Các sự kiện sau có thể dùng với ShadowRoot thông qua việc sự kiện bubble từ HTMLSlotElement:
- Sự kiện
slotchangecủaHTMLSlotElement -
Sự kiện được phát ra khi nút hoặc các nút chứa trong slot đó thay đổi.
Ví dụ
Các đoạn sau được lấy từ ví dụ life-cycle-callbacks của chúng tôi (xem bản live), ví dụ này tạo một phần tử hiển thị một hình vuông có kích thước và màu sắc được chỉ định trong các thuộc tính của phần tử.
Bên trong định nghĩa lớp của phần tử <custom-square>, chúng ta bao gồm một số callback vòng đời gọi đến một hàm bên ngoài, updateStyle(), hàm này thực sự áp dụng kích thước và màu sắc cho phần tử. Bạn sẽ thấy rằng chúng ta truyền this (chính custom element) làm tham số.
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);
}
// …
}
Trong chính hàm updateStyle(), chúng ta lấy tham chiếu đến shadow DOM bằng Element.shadowRoot.
Từ đây, chúng ta dùng các kỹ thuật duyệt DOM tiêu chuẩn để tìm phần tử <style> bên trong shadow DOM và sau đó cập nhật CSS nằm trong đó:
function updateStyle(elem) {
const shadow = elem.shadowRoot;
const childNodes = shadow.childNodes;
for (const node of childNodes) {
if (node.nodeName === "STYLE") {
node.textContent = `
div {
width: ${elem.getAttribute("l")}px;
height: ${elem.getAttribute("l")}px;
background-color: ${elem.getAttribute("c")};
}
`;
}
}
}
Thông số kỹ thuật
| Specification |
|---|
| DOM> # interface-shadowroot> |