【问题标题】:innerText not preserving line breaksinnerText 不保留换行符
【发布时间】:2020-08-04 21:18:33
【问题描述】:

我正在尝试从字符串中删除 HTML 标记,但我想删除换行符。下面的代码不起作用,到目前为止,我还没有找到有效的正则表达式解决方案。

let input = "First<br>Second"
let cleaned = document.createElement("pre");
cleaned.innerHTML = input;
let output = cleaned.innerText;
console.log(output);

我想要什么:“第一\n第二”

它返回什么:“FirstSecond”

我该如何解决这个问题?

【问题讨论】:

  • 我猜这取决于您使用的浏览器,在 Safari 中会保留换行符,但不是 Firefox、Opera 或 Chrome。我认为这是对浏览器战争的倒退,当时微软发明了 innerText 并且 W3C 提出了 textContent。它们的工作方式略有不同,一直持续到今天,Firefox 的 Mozilla/Netscape 根源似乎意味着它为两者都实现了 textContent。

标签: javascript escaping innerhtml innertext


【解决方案1】:

你说你还没有让任何正则表达式工作,你试过这个吗?

cleaned.innerHTML = input.replace(/<br>/gi, "\n");
【解决方案2】:

这行得通吗?

let input = "First<br>Second"
let output = input.replace("<br>", "\\n");
console.log(output);

【讨论】:

  • 这很接近,但输入可能有其他标签,如 &lt;p&gt;&lt;span&gt;
  • 我已经提出了这个建议,而且它有效。你说你想删除
    标签,插入一个换行符,然后输出到控制台。你为什么提到其他标签?你也想处理这些吗?
  • @user12976477,这会起作用吗? let input = "First&lt;br&gt;Second" 然后let output = input.replace(/&lt;\/?[^&gt;]+(&gt;|$)/g, "/n");
  • @Jy T 是的!这是第一个对我有用的正则表达式。谢谢。
猜你喜欢
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
  • 2013-03-15
  • 1970-01-01
  • 2011-07-30
  • 1970-01-01
相关资源
最近更新 更多