【问题标题】:turn <br> into line breaks using javascript (not php)使用 javascript(不是 php)将 <br> 变成换行符
【发布时间】:2013-03-15 05:35:35
【问题描述】:

我需要从 div 中提取带有段落和跨度以及其他内容的文本并将其放入 textarea。我只需要加载文本,而不是 HTML。

为此,我可以使用:

loadtext = $('#mydiv').text();

但是,我确实需要保留换行符。

为此,我正在做:

loadtext = $('#mydiv').text().replace(/<br>/gm, '\r\n');

但它似乎不起作用,因为当我将该文本加载到文本区域时,它都是平坦的,没有换行符。我做错了吗?

【问题讨论】:

  • 当然,.text() 会剥离 HTML,包括 &lt;br&gt;
  • 我想知道为什么你没有换行符 - jsfiddle.net/evNKv
  • @Xeano 你的fiddle不对,你在
    之前按了回车,所以这个换行符其实是在textarea中

标签: javascript jquery html string line-breaks


【解决方案1】:

另一种解决方案是使用从未添加到文档中的中间元素。

var html = $('#mydiv').html(); // e.g. '<p>line 1</p><br><br><p>line 2</p>'
var text = $('<div>').html(html.replace(/<br\/?>/g, '\n')).text();
/* text =
"line 1

line 2" 
*/
$('#mytextarea').text(text);

这支持&lt;br&gt; (HTML) 和&lt;br/&gt;(XHTML)。

【讨论】:

    【解决方案2】:

    $('#mydiv').text() 已被删除所有 HTML,包括&lt;br&gt; 元素,因此这将不起作用。您需要修改#mydiv元素的HTML并替换所有&lt;br/&gt;元素,然后检索文本。

    $('#mydiv').find('br').each(function(){
        $(this).after("\n")
               .remove();
    });
    var loadtext = $("#mydiv").text();
    

    【讨论】:

    • 谢谢!然而,最终的工作解决方案也结合了下面的一些答案,即创建一个像这样的中间元素:newdiv = $('#mydiv').clone();,然后将上述内容应用于该 div。原因是通过将 div 本身上的 &lt;br&gt; 替换为 \n,div 也发生了变化,而我不需要更改它,而只需要其内容的文本版本。
    猜你喜欢
    • 2012-05-16
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多