ขยาย HTMLSelectElement
Sep 02 2020
เมื่อเร็ว ๆ นี้ฉันพยายามขยาย HTMLSelectElement แทนที่จะสร้างองค์ประกอบใหม่ด้วยเหตุผลด้านความหมายและความสามารถในการเข้าถึงเช่น:
let customSelect = function () {
customElements.define(
"custom-select",
class CustomSelect extends HTMLSelectElement {
connectedCallback() {
this.attachShadow({ mode: "open" });
this.shadowRoot.innerHTML = `
test
`;
}
},
{ extends: "select" }
);
};
export default customSelect;
มันส่งคืนข้อผิดพลาดต่อไปนี้: custom-select.js: 6 Uncaught DOMException: ล้มเหลวในการรัน 'attachShadow' บน 'Element': องค์ประกอบนี้ไม่รองรับ attachShadow
โอเคเป็นเรื่องที่คาดเดาได้
เนื่องจากฉันไม่สามารถทำงานกับ shadow-dom ได้คำถามของฉันคืออะไรคือทางออกที่ดีที่สุดจากที่นั่น?
จนถึงตอนนี้ฉันสามารถจินตนาการได้:
- ทำงานโดยตรงกับ innerHTML ของส่วนประกอบนี้
- การสร้างองค์ประกอบใหม่ล่าสุดเพื่อทำงานกับ Shadow Dom
- เขียนทับเงาที่มีอยู่? (หากวิธีดังกล่าวอาจมีอยู่)
แล้วสิ่งที่อยู่ในใจของคุณคือโซลูชันที่ง่ายที่สุดและเป็นมิตรกับ SEO?
nb: โซลูชันต้องเป็นแบบกำหนดเองตามองค์ประกอบ
คำตอบ
Supersharp Sep 03 2020 at 17:42
ทำงานโดยตรงกับ innerHTML ของส่วนประกอบนี้
เป็นโซลูชันที่ "ง่ายที่สุดและเป็นมิตรกับ SEO"
การสร้างองค์ประกอบใหม่ล่าสุดเพื่อทำงานกับ Shadow Dom
เป็นไปได้ที่จะใช้งานง่ายที่สุดเนื่องจากคุณสามารถกำหนด UI ขั้นสูงได้
เขียนทับเงาที่มีอยู่?
เป็นไปไม่ได้. เป็นแบบอ่านอย่างเดียว
ตัวอย่างการนี้