【问题标题】:How do I remove all the <br> and turn them into line breaks (\n) in JQuery? [closed]如何删除所有 <br> 并将它们转换为 JQuery 中的换行符 (\n)? [关闭]
【发布时间】:2011-01-04 22:56:24
【问题描述】:

我只是做一个replaceWith 吗?最好的方法是什么?

function replaceBreaks(s){
            var content = $('<div>' + s + '</div>');
            content.find("br").replaceWith("\n");
            return content.html();
        }

【问题讨论】:

  • 显示代码否则我的答案是紫色的。
  • 你打算如何处理结果字符串?
  • 如果您将一些 html 转换为纯文本,那么与字符串和正则表达式交互会比 jquery 函数更好。
  • 如果你能在服务器上做到这一点最好 - 除非你有一组非常奇怪的条件:-)
  • 好的,所以您在问题中添加了一些代码。它不适合你吗?以什么方式?你在看什么?你能指望什么?你试过什么?

标签: javascript jquery html css templates


【解决方案1】:

试试这样的:

$('br').text('\n').contents().unwrap();

首先它向\n 的所有 br 元素添加一个文本节点子节点。然后它解开它们,只留下它下面的文本。你可以在这里看到它的实际效果:

http://jsfiddle.net/UgZNm/

【讨论】:

    【解决方案2】:

    我找到了这个正则表达式,它应该可以解决各种格式问题:

    function br2nl(input) {
        return input.replace(/<[bB][rR](\s+)?\/?>/g, "\n");
    }
    

    【讨论】:

      【解决方案3】:

      在没有实际 HTML 解析器的情况下解析 HTML 可能是个坏主意,但正则表达式通常就足够了。

      text.replace(/<br[^>]*>/gi, "\n");
      

      这将替换
      &lt;br/&gt;&lt;br /&gt;&lt;br some_attribute="value" /&gt; 等。

      但是,它不会取代&lt;/br&gt;,以防您可能拥有&lt;br&gt;&lt;/br&gt;。如果是这样,你可以试试这个:

      text.replace(/<\/?br[^>]*>/gi, "\n");
      

      如果你不介意&lt;br&gt;&lt;/br&gt; 变成\n\n。

      【讨论】:

      • 只是一些想法:使用正则表达式处理 html 通常被认为是一个坏主意的原因是,有很多边缘情况是有效的 html,很难或不可能用正则表达式捕获。但是,如果您对正在处理的内容有足够的控制权,那么很多时候您可以侥幸逃脱。
      • 但是,通常情况下,我看到您在问题中所要求的内容是当您有一些 html 内容还想在某种工具提示中使用或在 alt= 或 title= 属性中。如果这是您的用例,您可能仍然在结果文本中包含 html 内容——段落标签、像 " 之类的实体等。您最好找出一种将 html 处理为纯文本的方法服务器端使用适当的 HTML 解析库。
      【解决方案4】:

      我认为replaceWith 是最好的解决方案,并且清晰易懂:

      $(selector + ' br').replaceWith('\n');
      

      这是一个展示这一点的小提琴:http://jsfiddle.net/hHJvM/

      【讨论】:

      • 你的小提琴不起作用,因为replaceWith 只接受 HTML 字符串、DOM 元素或 jQuery 对象。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-12
      • 1970-01-01
      • 2011-02-24
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      相关资源
      最近更新 更多