class MyTab extends HTMLElement{ //創建一個類名MyTab constructor(){ //構造函數 super(); //指向父類構造函數,必須要有的 const shadow = this.attachShadow({ //影子dom mode : 'open' //開放的封裝模式 }) let n = 0; let titles = ['標題1','標題2','標題3']; let inners = ['內容1','內容2','內容3']; for(let i=0;i<3;i++){ let button = document.createElement('button'); button.innerHTML = titles[i]; if(i == n){ button.classList.add('active'); } button.onclick = function () { let aButton = shadow.querySelectorAll('button'); let aP = shadow.querySelectorAll('p'); for(let i=0;i<3;i++){ aButton[i].classList.remove('active'); aP[i].classList.remove('active'); } this.classList.add('active'); aP[i].classList.add('active'); } shadow.appendChild(button); } for(let i=0;i<3;i++){ let p = document.createElement('p'); p.innerHTML = inners[i]; if(i == n){ p.classList.add('active'); } shadow.appendChild(p); } const style = document.createElement('style'); style.textContent = ` button.active{ background : yellow; } p{ display:none; } p.active{ display:block; } `; shadow.appendChild(style); let div = document.createElement('div'); //插槽 div.innerHTML = '<slot></slot>'; shadow.appendChild(div); } } customElements.define('my-tab',MyTab); //注冊組件
然后在html文件里面寫入<my-tab></my-tab>就可以使用組件了