2011-06-13 111 views
17

我有一个textarea,当用户按下回车键时,我插入\n。来自这个textarea的代码通过jQuery.ajax()发送到WCF服务。我不能在数据库中保存\n,因为它不会在其他使用该服务的应用程序中显示。如何在JavaScript中用<br />替换 n?

如何将\n替换为<br />标签?

解决方案

那么多的你试图和一些有使用Javascript正则表达式与/ g(全局修改)的权利。 最后,我插入了两次,我不知道为什么,我唯一的猜测是,按键事件jQuery创建双\ n我调试。

$('#input').keypress(function (event) { 
    if (event.which == '13') { 
     inputText = $('#input').val() + '\n'; 
     $('#input').val(inputText); 
    } 
}); 
+6

通常它不是取代它在客户端 – Teneff 2011-06-13 14:40:07

+0

@Teneff一个好主意,\ n不发送,然后到服务器,IT方面eems省略。我可以在服务器上更改它,但除文本外我什么都没收到。 – eugeneK 2011-06-13 14:42:46

+1

您还应该以输入的原始格式存储它,如果您添加了新应用程序来检索可支持/ n的数据,那么您肯定应该显示它?你尝试过编码吗? – jimplode 2011-06-13 14:43:03

回答

26

与全球范围内更换

$('#input').val().replace(/\n/g, "<br />") 

$('#input').val().replace("\n", "<br />", "g") 
+1

它取代全球罚款,但它取代按键上的两个br标签 – eugeneK 2011-06-13 14:50:20

11

这是可以做到这样的:

$('textarea').val().replace(/\n/g, "<br />"); 

编辑:对不起......在JavaScript中的正则表达式应该不被引用

working example

+0

doesn'工作,不知道为什么! – eugeneK 2011-06-13 14:45:03

+0

因为他想替换'\ n'而不是'/ \ n /',所以不起作用。如果它打算成为一个正则表达式,它只会取代第一次出现。 – BrunoLM 2011-06-13 14:45:18

+1

这是错误的。使用'“\ n”'或'/ \ n /',而不是'“/ \ n /”'。当涉及到正则表达式引用时,JavaScript不像PHP那样残缺;) – Qtax 2011-06-13 14:45:40

1

您可以使用简单的JavaScript字符串函数。

string.replace("\n", "<br>") 
1

从您的WCF服务中,您不仅可以使用String.Replace

text = text.Replace("\n","<br />"); 
6

就像在评论和其他答案中说的,最好在服务器端做。

但是,如果你想知道如何做到这一点的客户方,这是一个简单的解决办法:

textareaContent.replace(/\\n/g, "<br />"); 

哪里textareaContent是在textarea的数据变量。

编辑:已更改,以便全局替换而不仅仅是第一次匹配。

+0

它代替了\ n – eugeneK 2011-06-13 14:45:41

+0

的第一次出现修正了这一点,谢谢您的注意。 – rzetterberg 2011-06-13 14:49:03

+0

唯一的解决方案,为我工作......谢谢:) – 2016-10-01 20:28:49

1
var replaced = $('#input').val().replace("\n", "<br/>"); 
1

,您可以使用内置了正则表达式的一点帮助替换功能的JavaScript,例如

$('#input').val().replace(/\n\r?/g, '<br />') 

此代码将返回所有进入重放与<br>

+0

这是唯一一个出于整个页面,为我的wordpress编辑工作。如果您在插件中使用wordpress编辑器,并且出于某种原因需要显示编辑器内容的预览,则这是唯一适用的编辑器。 – 2013-11-26 03:03:23

+0

你是否真的尝试过这个问题的每一个解决方案,如果你真的这么做,那么你真的很执着。 :) – 2013-11-27 13:46:53

2

建立在其他答案,这可能是最好的PHP做的。现在,假设你不希望这阿贾克斯(这将是毫无意义的,并造成不必要的服务器负载),你应该使用phpjs.org的的this function JavaScript的端口:

function nl2br (str, is_xhtml) { 
    // Converts newlines to HTML line breaks 
    // 
    // version: 1103.1210 
    // discuss at: http://phpjs.org/functions/nl2br // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // + improved by: Philip Peterson 
    // + improved by: Onno Marsman 
    // + improved by: Atli Þór 
    // + bugfixed by: Onno Marsman // +  input by: Brett Zamir (http://brett-zamir.me) 
    // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // + improved by: Brett Zamir (http://brett-zamir.me) 
    // + improved by: Maximusya 
    // *  example 1: nl2br('Kevin\nvan\nZonneveld'); // *  returns 1: 'Kevin\nvan\nZonneveld' 
    // *  example 2: nl2br("\nOne\nTwo\n\nThree\n", false); 
    // *  returns 2: '<br>\nOne<br>\nTwo<br>\n<br>\nThree<br>\n' 
    // *  example 3: nl2br("\nOne\nTwo\n\nThree\n", true); 
    // *  returns 3: '\nOne\nTwo\n\nThree\n' var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '' : '<br>'; 

    return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + breakTag + '$2'); 
} 

http://phpjs.org/functions/nl2br:480

+0

$ 1和$ 2是什么意思? ([^> \ r \ n]?)和(\ r \ n | \ n \ r | \ r | \ n) – eugeneK 2011-06-13 15:03:26

+0

为了告诉你真相,我对正则表达式并不太满意。但我对这一点了解的这一点总结在这两个链接中:美元符号 - http://mootools-users.660466.n2.nabble.com/Moo-preg-replace-in-javascript-td4718179.html;所有的r和n - http://lawrence.ecorp.net/inet/samples/regexp-format.php(向下滚动到关于用html br替换回车符的部分,代码如下所示 - http:/ /jsfiddle.net/Dar96/9/ – Tomas 2011-06-13 15:32:08

1

下面将取代用<br />\n所有实例:

while (message.indexOf("\\n") !== -1) { 
    message = message.replace("\\n", "<br />"); 
} 
+0

一次迭代就足够了,因为它取代了所有的发生。 – 2014-08-11 15:36:04