html - 解开 HTML 字符串中不必要的嵌套 div (NodeJs)

标签 html node.js nested jsdom unwrap

是否有一个好的 npm 包可以删除在 NodeJS 服务器上运行的 html 字符串中不必要的嵌套标签(无浏览器 DOM)?我尝试过 sanitize-html,但似乎不可能做到这一点。

我收到用户发来的电子邮件html,所以我无法控制输入格式,并且有时会带有不必要的嵌套标签,如下所示:

<div>
  <div>
    <div>
      <div>
        <div>Hey Bob:<br /></div>
        <div>
          I wanted to see if you had a chance to review this. Three things come to mind:<br />
        </div>
        <ol>
          <li>blah<br /></li>
          <li>blah<br /></li>
          <li>blah<br /></li>
        </ol>
      </div>
    </div>
  </div>
</div>

我想解开外部 div(以及字符串中任何其他不必要的包装标签),直到得到如下所示的结果:

<div>
  <div>Hey Bob:<br /></div>
  <div>
    I wanted to see if you had a chance to review this. Three things come to mind:<br />
  </div>
  <ol>
    <li>blah<br /></li>
    <li>blah<br /></li>
    <li>blah<br /></li>
  </ol>
</div>

我尝试使用cheerio和jsdom,但似乎都没有像python中beautifulsoup那样的解包功能。

最佳答案

不确定哪个包可以做到这一点,但在你的情况下,可以使用一些基本的普通 JavaScript 轻松完成:

const bodyNode = document.querySelector("body");

function ParseHtml(node)
{
    if (node.firstElementChild.nodeName === 'BR')
    {
        return node.parentNode.outerHTML;
    }
    return ParseHtml(node.firstElementChild);
}

console.log(ParseHtml(bodyNode));

关于html - 解开 HTML 字符串中不必要的嵌套 div (NodeJs),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59080257/

相关文章:

html - 输入框填满可用空间?

node.js - 从派生命令管道输出时如何返回错误?

ruby-on-rails - 嵌套对象表单未按预期工作

css - 奇怪的容器高度问题

javascript - 附加到空元素不起作用

xml - node-soap 客户端 (Node.js) 中数组字段的命名空间

html - 嵌套形式替代

java - True boolean while 语句在嵌套 if 中不退出循环

html - 当存在远程子类时,CSS 能否检测并移动 HTML 元素?

node.js 请求多行