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

标签 javascript css dom

我需要将网站的一部分转换为带有从 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/

相关文章:

html - Kindle Fire 丝绸浏览器阅读 View CSS

html - 表格 CSS 在 Chrome 和 Firefox 中有不同的效果

javascript - IE7 : How do I create a real NodeList?

javascript - 如何使用 JavaScript 更改 <a> 标签中的 title 属性?

javascript - HTML Audio 元素可以播放错误的音频格式

html - text-align :center doesn't work vertically in CSS, 我该如何解决这个问题?

javascript - emberjs 中的嵌套路由而不使用资源导出

javascript - vertx应用程序中的CORS问题不起作用

javascript - 在 javascript 中获取同步行为?

javascript - 我如何知道从 URL 下载完成?