gpt4 book ai didi

javascript - 如何使用 getComputedStyle 将 HTML 子树转换为字符串和内联样式?

转载 作者:行者123 更新时间:2023-11-28 03:05:45 25 4
gpt4 key购买 nike

我需要将网站的一部分转换为带有从 getCompulatedStyle 生成的内联 CSS 的 html 字符串。

这个想法是将所有嵌套和平面元素转换为具有内联样式的字符串。输出可以粘贴到 .html 或在线代码编辑器中,并且看起来是一样的。它已经很接近了,我已经修补了一个小时左右了。

这是迄今为止我的代码:

function loopThroughRoots(root) {
let htmlString = "";
let temp = root;

console.log(root.tagName);

temp.setAttribute(
"style",
window.getComputedStyle(root).cssText
);

if (temp.children.length > 0) {
console.log("has children, looping");
for (let i = 0; i < temp.children.length; i++) {
htmlString += loopThroughRoots(temp.children[i]);
}
} else {
console.log("no children, setting value");
htmlString = temp.outerHTML;
}

return htmlString;
}

var root = document.querySelector("#markdown");
console.log(loopThroughRoots(root));

但它似乎错过了任何有 child 的元素。这些父标签(及其样式)不会显示在最终字符串中。

我可以更改什么来包含这些父元素?或者我还能怎么做?

这是一个例子:

Example Pen

最佳答案

我通过获取根节点的 outerHTML 并使用 stylesheets property 使您的示例正常工作。获取样式:

document.getElementById('btn').onclick = () => {
const styles = [...document.styleSheets]
.map(sheet => [...sheet.rules]
.map(rule => rule.cssText)
.join(''))
.join('');
const markup = document.querySelector("#example").outerHTML;

console.log(`<style>${styles}</style>${markup}`);
}
.example1 {
margin-left:1rem;
}

h1 {
font-size:3rem;
}

.black-background {
background-color:black;
}

.color-white {
color:white;
}

.padding-2 {
padding:2rem;
}
<button id="btn">Log markup and style to console</button>

<div id="example" class='example1'>
<h1>Test</h1>
<blockquote class="black-background">
<h3 class="color-white">Children work</h3>
<p class="color-white">I will show up</p>
</blockquote>
<div class="padding-2">
<p>My parent has children</p>
<p>The parent doesn't show up in the string.</p>
</div>
</div>

关于javascript - 如何使用 getComputedStyle 将 HTML 子树转换为字符串和内联样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60625761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com