Я думаю, это то, что вы хотите. Кажется, проблема в 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;
h1.style.color = "blue";
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>