Skip to content

dom get all style #75

@openHacking

Description

@openHacking

我需要将一个DOM元素的内容和样式全部能够通过dom.innerHTML导出来。请用js将指定DOM元素上所有的外联样式、内联样式、行内样式全部转化为行内样式,便于我用dom.innerHTML的时候,能够取到全部的内容和样式。

可以通过以下步骤将指定DOM元素上的所有样式转化为行内样式:

  1. 获取指定DOM元素
const element = document.querySelector('#your-element-id');
  1. 获取元素上所有的样式信息(外联样式、内联样式、行内样式)
const computedStyles = window.getComputedStyle(element);
const inlineStyles = element.style;
  1. 将所有样式信息转化为行内样式,并设置到元素的style属性中
const allStyles = {};
for (let i = 0; i < computedStyles.length; i++) {
  const propName = computedStyles[i];
  allStyles[propName] = computedStyles.getPropertyValue(propName);
}
for (let propName in inlineStyles) {
  allStyles[propName] = inlineStyles[propName];
}
element.setAttribute('style', '');
for (let propName in allStyles) {
  element.style[propName] = allStyles[propName];
}
  1. 通过innerHTML获取元素内容和样式
const htmlString = element.innerHTML;

完整的代码如下:

const element = document.querySelector('#your-element-id');
const computedStyles = window.getComputedStyle(element);
const inlineStyles = element.style;
const allStyles = {};
for (let i = 0; i < computedStyles.length; i++) {
  const propName = computedStyles[i];
  allStyles[propName] = computedStyles.getPropertyValue(propName);
}
for (let propName in inlineStyles) {
  allStyles[propName] = inlineStyles[propName];
}
element.setAttribute('style', '');
for (let propName in allStyles) {
  element.style[propName] = allStyles[propName];
}
const htmlString = element.innerHTML;

注意:该代码将所有样式信息转化为行内样式,可能会导致一些样式失效或者冲突。建议在使用该代码之前仔细考虑是否有更好的解决方案。

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions