使用行分隔符(Javascript)替换textarea中的<br/>

时间:2013-03-05 13:43:53

标签: javascript jquery newline cakephp-2.1

我想这会在两分钟内得到解答,但我无法谷歌解决方案。

尝试:thisthis

我有一个textarea,它首先从服务器接收一些数据(动态使用AJAX)。 textarea中的文字可能如下所示:

Hello&nbsp;Cruel&nbsp;<br&nbsp;/>World!

我的用户不喜欢这种情况:)

所以我写了一个非常简单的函数:

    function replaceHtml( string_to_replace ) 
    {
        var result = replaceAll( string_to_replace, "&nbsp;", " ");
        result = result.replace(/<br\s*\/?>/mg,"\n\r"); // or "\n", "\r", "\r\n"
        return result;
     }

我的输出如下:

Hello Cruel World!

而不是:

Hello Cruel
World!

我希望解决方案最多5行,并且可以应用于所有浏览器和操作系统

是的,我不是正则表达的粉丝,所以也许真正的问题就在那里..

更新

From this answer和Michael_B先生我得到了这个解决方案,这对我有用,但我有预感这个角色可能不是最好的解决方案:

function replaceHtml( string_to_replace ) 
{
    return string_to_replace.replace(/&nbsp;/g, ' ').replace(/<br.*?>/g, '\u2028');
}

3 个答案:

答案 0 :(得分:8)

基于@Explosion Pills评论和jsFiddle

<强> DEMO

function replaceHtml( string_to_replace ) 
{
        return string_to_replace.replace(/&nbsp;/g, ' ').replace(/<br.*?>/g, '\n');
}

更新基于New line in text area

Updated DEMO

也许这会解决你的\n问题 - 需要jQuery。

function replaceHtml(string_to_replace) {
    return $("<div>").append(string_to_replace.replace(/&nbsp;/g, ' ').replace(/<br.*?>/g, '&#13;&#10;')).text();
}

答案 1 :(得分:1)

如果我错了,请纠正我,但不应该是$.replaceAll(),因为它不是JS的jQuery函数吗?

或纯{Javascript中的replace()

答案 2 :(得分:0)

你不需要在那里使用jQuery:

function replaceHtml( string_to_replace ) 
{
    var result = string_to_replace.replace(/\&nbsp;/g, ' ').replace(/<br\s*\/?>/mg,"\n\r"); // or "\n", "\r", "\r\n"
    return result;
 }