【问题标题】:Check for surrounding tags检查周围的标签
【发布时间】:2023-02-21 17:25:46
【问题描述】:

我需要检查一个字符串是否包含 <br> 标签而没有任何周围的 HTML 标签。是否有正则表达式或任何其他方法可以这样做?

例如我有这样的字符串:

Lorem ipsum<br><br><br>dolor sit amet

或者

dolor sit amet<br>lorem isum

需要他们成为

<p><br></p><p><br></p>

【问题讨论】:

  • 你能给个例子吗 ?
  • 问题是:为什么你会想要做那样的事情?!否则这看起来很像XY Problem
  • 我看到它唯一安全的方法是创建一个 DocumentFragment,用原始 html 设置它的 innerHTML 并以编程方式处理该节点以找到所有 &lt;br&gt; 孤儿并将它们包装为相应 &lt;p&gt; 的子节点。任何其他方法都会自寻烦恼..就像下面建议的答案应该被删除,以免任何人看到
  • 那么Lorem ipsum&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;dolor sit amet

标签: javascript html


【解决方案1】:

这是一个安全的方法

我调查了如何即时删除多余的 BR,但没时间了

const str = `Lorem ipsum<br><br><br>dolor sit amet

dolor sit amet<br>lorem isum`
const fragment = document.createElement("div");
fragment.innerHTML = str;
fragment.querySelectorAll("br").forEach(br => {
  const wrapper = document.createElement("p");
  br.parentNode.insertBefore(wrapper, br);
  wrapper.appendChild(br)
})

console.log(fragment.innerHTML);

【讨论】:

  • 谢谢,这对找到一个好的解决方案有很大帮助!
【解决方案2】:

所以,据我所知,你想用 p 标签包装你的 br 标签,你可以在 js 中使用 string.replaceAll 函数来做到这一点,如下所示:

string.replaceAll('<br>','<p> <br> </p>')

【讨论】:

  • 问题是,还有包装标签。这样就可以用&lt;p&gt; 将它们包裹起来。
  • 它们只包裹着 p 标签吗?
  • 不,这很不一致。它们被几个 HTML 标签包裹,或者根本不包裹。所以我想过滤非包装的。
  • @temp 也许使用 (.parentNode.nodeName) 来查看它们是否被包裹
【解决方案3】:

我不确定我的方法是否是您问题的最佳答案,但我尝试拆分 &lt;br&gt; 并删除每个部分中的所有其他标签,最后通过 &lt;p&gt;&lt;br&gt;&lt;/p&gt; 加入它们

我假设您不需要任何其他标签,但 p 包装了 br 标签

const text = 'Lorem ipsum <p><br></p> sdfads <div><br></div> <br>dolor sit amet'


const result = text.split('<br>').map(item=>item.replaceAll(/</?[wd]+>/gi, '')).join('<p><br></p>')
console.log(result)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    相关资源
    最近更新 更多