【问题标题】:DOMParser - get element styleDOMParser - 获取元素样式
【发布时间】:2016-08-03 14:27:20
【问题描述】:

我正在尝试获取使用 DOMParser 解析的元素的样式属性。 2 个 console.logs 是空的。知道为什么会这样吗?

<div id='foobar'>
  <style>
  .xl496
    {
    color:#336699;
    }
  </style>

  <table>
   <tr>
    <td class='xl496'>Test:</td>
   </tr>
  </table>
</div>

var data = document.getElementById("foobar");

var parser = new DOMParser();
var doc = parser.parseFromString(data.innerHTML, "text/html");
var cols = doc.getElementsByTagName("tr");
var col = cols[0];
var tds = col.getElementsByTagName("td");
var td = tds[0];

console.log(getComputedStyle(td).getPropertyValue("color"));
console.log(td.style.color);

【问题讨论】:

  • 你必须使用 DOMParser 吗?
  • 是的。因为稍后我打算像这样从剪贴板获取数据 e.clipboardData.getData('text/html');

标签: javascript html parsing domparser


【解决方案1】:

getComputedStyle 是一种只对窗口可用的方法。由于您的代码位于 DOM 解析器中,因此它没有正确的上下文,因此在该调用中返回空字符串。所以,这里有一种绕过它的方法。您可以获取有问题的元素,将其插入到窗口中,运行getComputedStyle,然后将其放回 DOMParser(片段)中。

var clipboardData = document.getElementById("foobar").outerHTML;


var parser = new DOMParser();
var doc = parser.parseFromString(clipboardData, "text/html");

var col = doc.querySelector("tr");
var td = col.querySelector("td");

// td has to be in the window, not a fragment in order to use window.getComputedStyle
document.body.appendChild(td);

console.log(window.getComputedStyle(td).getPropertyValue("color"));
// the next one expected to be "" since it does not have inline styles
console.log(td.style.color);

// Insert the td back into the dom parser where it was
col.insertBefore(td, col.firstChild);
<div id='foobar'>
  <style>
    .xl496 {
      color: #336699;
    }
  </style>

  <table>
    <tr>
      <td class='xl496'>Test:</td>
    </tr>
  </table>
</div>

您可以使用this answer 中的内容查看将 RGB 转换为 HEX 的解决方案

【讨论】:

  • 当然。我可以做到。但我计划下一步添加剪贴板集成。所以我会从 e.clipboardData.getData('text/html');
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
  • 2014-10-31
  • 2015-02-24
  • 2014-02-24
  • 1970-01-01
相关资源
最近更新 更多