我有此代码:-
const h1= (tag) => {
const ptag = document.querySelector(tag);
const shadow = ptag.attachShadow({
mode: 'open'
});
const h1 = document.createElement('h1');
h1.innerHTML = ptag.innerHTML;
shadow.appendChild(h1);
}
const h2= (tag) => {
const ptag = document.querySelector(tag);
const shadow = ptag.attachShadow({
mode: 'open'
});
const h2 = document.createElement('h2');
h2.innerHTML = ptag.innerHTML;
shadow.appendChild(h2);
}
const div = (tag) => {
const ptag = document.querySelector(tag);
const shadow = ptag.attachShadow({
mode: 'closed'
});
const div = document.createElement('div');
div.innerHTML = ptag.innerHTML;
shadow.appendChild(div);
}
h1('city-name');
h2('we-data');
h2('temp-data');
div('weather-app');
<weather-app>
<city-name>London</city-name>
<we-data>Rains</we-data>
<temp-data>15 C</temp-data>
<city-name>Hi. Does thhis look like h1 text?</city-name>
</weather-app>
我想这是您想要的。问题似乎是shadow.appendChild()
,我认为您需要使用shadow.host
const h1 = (tag) => {
const ptag = document.querySelector(tag);
const shadow = ptag.attachShadow({
mode: 'open'
});
const h1 = document.createElement('h1');
h1.innerHTML = ptag.innerHTML;
shadow.host.parentNode.replaceChild(h1,shadow.host);
}
也不要使用.appendChild()
,但要使用.replaceChild()
演示
const h1 = (tag) => {
const ptag = document.querySelector(tag);
const shadow = ptag.attachShadow({
mode: 'open'
});
const h1 = document.createElement('h1');
h1.innerHTML = ptag.innerHTML;
shadow.host.parentNode.replaceChild(h1,shadow.host);
}
const h2 = (tag) => {
const ptag = document.querySelector(tag);
const shadow = ptag.attachShadow({
mode: 'open'
});
const h2 = document.createElement('h2');
h2.innerHTML = ptag.innerHTML;
shadow.host.parentNode.replaceChild(h2,shadow.host);
}
const div = (tag) => {
const ptag = document.querySelector(tag);
const shadow = ptag.attachShadow({
mode: 'closed'
});
const div = document.createElement('div');
div.innerHTML = ptag.innerHTML;
shadow.host.parentNode.replaceChild(div,shadow.host);
}
h1('city-name');
h2('we-data');
h2('temp-data');
h1('city-name');
div('weather-app');
<weather-app>
<city-name>London</city-name>
<we-data>Rains</we-data>
<temp-data>15 C</temp-data>
<city-name>Hi. Does thhis look like h1 text?</city-name>
</weather-app>
shadow.host
和replaceChild()
.querySelector()
返回第一个匹配的元素,.querySelector()
返回所有匹配的元素,因此您需要.querySelectorAll()
.querySelectorAll()
,.querySelectorAll()
和h1
函数看起来都非常相似-我随便改写了它们h2
div