2011-06-13 48 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