【问题标题】:Get Array of elements from a chunk of string从一大块字符串中获取元素数组
【发布时间】:2022-01-04 13:46:59
【问题描述】:

我有一个包含 HTML 元素的模板文字,我想通过一个函数运行它并获取所有元素及其字符串的数组。

const tmp = `
<div>
 <h1>Heading <span>inline</span></h1>
 <button>Click Me</button>
</div>
`

这应该给我:

["<h1>Heading <span>inline</span></h1>", "<span>inline</span>", "<button>Click Me</button>"]

我该怎么做?

【问题讨论】:

  • 所以你想要 div 的 innerHTML?
  • 1.解析 HTML,2. 选择所有元素,3. 获取它们的外部 HTML。请参阅DOMParserquerySelectorAllmapouterHTML。你试过什么?
  • 如果你没有DOMParser可用(如果你不在浏览器环境中),你可以试试jsdom
  • 我试过 DOMParser 但我很难找到一个 API 将整个元素作为字符串返回 "
    MyDiv
    "
  • @inux .outerHTML?还是XMLSerializer

标签: javascript html dom html-parsing


【解决方案1】:

试试这个方法:

const tmp = `
<div>
 <h1>Heading <span>inline</span></h1>
 <button>Click Me</button>
</div>
`
let elems = [],
 domElement = new DOMParser().parseFromString(tmp, "text/xml"),
 results = domElement.evaluate('//div//*', domElement, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);

for(let i = 0; i < results.snapshotLength; i++) {
  let node = results.snapshotItem(i); 
  elems.push(node);     
}
console.log(elems)

输出应该是您的预期输出。

【讨论】:

  • text/html 而不是 text/xml 可能更好。没有 XPath 的替代方案:console.log(Array.from(domElement.querySelector("div").querySelectorAll("*")).map(({ outerHTML }) =&gt; outerHTML));。此外,domElement 用词不当:domElementHTMLDocument,而不是 Element
  • 这在浏览器中完美运行,我需要一个节点版本。谢谢
  • @inux - 根据 SO 政策,您可能应该在单独的问题中发布节点版本请求。
猜你喜欢
  • 1970-01-01
  • 2018-12-31
  • 2021-04-07
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
  • 1970-01-01
相关资源
最近更新 更多