Event.composedPath()
åºçº¿
广æ³å¯ç¨
èª 2020å¹´1æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
composedPath() æ¯ Event æ¥å£çä¸ä¸ªæ¹æ³ï¼å½å¯¹è±¡æ°ç»è°ç¨è¯¥ä¾¦å¬å¨æ¶è¿åäºä»¶è·¯å¾ãå¦æå½±åæ ¹èç¹è¢«å建并ä¸ShadowRoot.modeæ¯å
³éçï¼é£ä¹è¯¥è·¯å¾ä¸å
æ¬å½±åæ ä¸çèç¹ã
è¯æ³
var composed = Event.composedPath();
åæ°
æ ã
è¿åå¼
ä¸ä¸ª EventTarget对象æ°ç»ï¼è¡¨ç¤ºå°å¨å
¶ä¸è°ç¨äºä»¶ä¾¦å¬å¨ç对象ã
示ä¾
卿们ç composed-composed-path ä¾åä¸ï¼æä»¬å®ä¹äºä¸¤ä¸ªèªå®ä¹å
ç´ ï¼<open-shadow> å <closed-shadow>ï¼ä¸¤ 个å
¨é½è°ç¨äºå®ä»¬ææ¬å±æ§çå
容ç¶åä½ä¸º<p> å
ç´ çææ¬å
容å°å®ä»¬æå
¥å°å
ç´ çå½±å DOM ä¸ã两è
ä¹é´å¯ä¸çåºå«æ¯å®ä»¬å½±åçæ ¹ç»ç¹æ¯å¨å®ä»¬ç模å¼è¢«åå«è®¾ç½®æopen å closed çæ
åµä¸è¿æ¥çã
第ä¸ä¸ªå®ä¹å°±åè¿æ ·ï¼æ¯å¦ï¼
customElements.define(
"open-shadow",
class extends HTMLElement {
constructor() {
super();
let pElem = document.createElement("p");
pElem.textContent = this.getAttribute("text");
let shadowRoot = this.attachShadow({ mode: "open" }).appendChild(pElem);
}
},
);
ç¶åæä»¬å¨æä»¬ç页é¢ä¸æå ¥å ¶ä¸ä¸ä¸ªå ç´ ï¼
<open-shadow text="I have an open shadow root"></open-shadow>
<closed-shadow text="I have a closed shadow root"></closed-shadow>
ç¶åå¨ <html> å
ç´ ä¸æå
¥ä¸ä¸ªé¼ æ ç¹å»äºä»¶ï¼
document.querySelector("html").addEventListener("click", function (e) {
console.log(e.composed);
console.log(e.composedPath());
});
å½ä½ å
åç¹å» <open-shadow> å <closed-shadow> è¿ä¸¤ä¸ªå
ç´ ï¼ä½ å°ä¼æ³¨æå°ä¸¤ä»¶äºæ
ã第ä¸ï¼ composed è¿ä¸ªå±æ§è¿åå¼ä¸º true å 为 click äºä»¶æ»è½å¤å¨å½±åè¾¹çä¸ä¼ æã第äºï¼ä½ å°æ³¨æå°ä¸¤ä¸ªå
ç´ ä¸composedPath çå¼çä¸åã <open-shadow> å
ç´ çç»æè·¯å¾æ¯è¿ä¸ªï¼
Array [ p, ShadowRoot, open-shadow, body, html, HTMLDocument https://mdn.github.io/web-components-examples/composed-composed-path/, Window ]
尽管 <closed-shadow> å
ç´ çç»æè·¯å¾æ¯åä¸é¢è¿æ ·ï¼
Array [ closed-shadow, body, html, HTMLDocument https://mdn.github.io/web-components-examples/composed-composed-path/, Window ]
å¨ç¬¬äºä¸ªä¾åä¸ï¼äºä»¶çå¬å¨ä»
è½å¤ä¼ æå° <closed-shadow> å
ç´ æ¬èº«ï¼ä½æ¯ä¸ä¼å°å½±åè¾¹çå
çèç¹ã
è§è
| è§è |
|---|
| DOM > # ref-for-dom-event-composedpathâ > |