如何分离或提取 HTML 个标签?

How to Seperate or Extract HTML Tags?

.

我要从 HTML 文件中提取 HTML 元素(标签)。 例如:

<div id="collapse" class="collapse" data-parent="#accordion"></div>
<div class="card-body">Lorem ipsum dolor sit amet, consectetur</div>
<p class="text">Lorem ipsum dolor sit amet, consectetur</p>
<p>Lorem ipsum dolor sit amet, consectetur</p>
<ul>
    <liLorem ipsum dolor sit amet, consectetur</li>
    <li class="list">Lorem ipsum dolor sit amet, consectetur</li>
</ul>
<input type="hidden" name="controlAccount" id="controlAccount" class="input" value="1">
<button type="button" data-role="none" class="slick-prev slick-arrow" aria-label="Previous" role="button" style="">SUBMIT</button>

我需要这样的结果;

<div id="collapse1" class="collapse"></div>
<div class="card-body"></div>
<p class="text"></p>
<p></p>
<ul>
    <li></li>
    <li class="list"></li>
</ul>
<input id="controlAccount" class="input">
<button class="slick-prev slick-arrow"></button>

我只想在 HTML 文件中保留 ID 和 类。 可能吗?你知道任何网站或简单的方法或任何软件吗? Visual Studio 代码或记事本++ ?

的任何插件

.

看来您只想复制具有适当标签名称、ID 和 类 的结构。

一种方法是构建一棵代表 HTML 的树。之后,您可以从中渲染新的 HTML 。如果你想适应这个,你需要读入文件并将它添加到 DOM,像实际的 HTML 一样对待它,然后你可以描述和渲染改变的 HTML ].这只是一个简单的例子。

您基本上想要执行以下操作:

const main = () => {
  let root = document.body
  let tree = describeHTML(root)
  let html = renderHTML(tree)
  console.log(html.innerHTML)
}

const main = () => {
  console.log(emptyInnerHTML(document.body))
}

const emptyInnerHTML = (element) => {
  return renderHTML(describeHTML(element)).innerHTML
}

const describeHTML = (node) => {
  return ({
    tagName: node.tagName,
    id: node.id || undefined,
    classList: [...node.classList],
    children: [...node.childNodes]
      .filter(child => child.nodeType != Node.TEXT_NODE && child.tagName !== 'SCRIPT')
      .map(child => describeHTML(child))
  })
}

const renderHTML = (tree) => {
  let node = document.createElement(tree.tagName)
  if (tree.id) node.setAttribute('id', tree.id)
  if (tree.classList && tree.classList.length) node.className = tree.classList.join(' ')
  if (tree.children && tree.children.length) {
    tree.children.forEach(child => node.appendChild(renderHTML(child)))
  }
  return node
}

main()
<div id="collapse" class="collapse" data-parent="#accordion"></div>
<div class="card-body">Lorem ipsum dolor sit amet, consectetur</div>
<p class="text">Lorem ipsum dolor sit amet, consectetur</p>
<p>Lorem ipsum dolor sit amet, consectetur</p>
<ul>
  <li>Lorem ipsum dolor sit amet, consectetur</li>
  <li class="list">Lorem ipsum dolor sit amet, consectetur</li>
</ul>
<input type="hidden" name="controlAccount" id="controlAccount" class="input" value="1">
<button type="button" data-role="none" class="slick-prev slick-arrow" aria-label="Previous" role="button" style="">SUBMIT</button>

输出

<div id="collapse" class="collapse"></div>
<div class="card-body"></div>
<p class="text"></p>
<p></p>
<ul>
  <li></li>
  <li class="list"></li>
</ul>
<input id="controlAccount" class="input">
<button class="slick-prev slick-arrow"></button>

树视图

{
  "tagName": "BODY",
  "children": [
    {
      "tagName": "DIV",
      "id": "collapse",
      "classList": [ "collapse" ]
    },
    {
      "tagName": "DIV",
      "classList": [ "card-body" ]
    },
    {
      "tagName": "P",
      "classList": [ "text" ]
    },
    {
      "tagName": "P"
    },
    {
      "tagName": "UL",
      "children": [
        {
          "tagName": "LI"
        },
        {
          "tagName": "LI",
          "classList": [ "list" ]
        }
      ]
    },
    {
      "tagName": "INPUT",
      "id": "controlAccount",
      "classList": [ "input" ]
    },
    {
      "tagName": "BUTTON",
      "classList": [ "slick-prev", "slick-arrow" ]
    }
  ]
}