Ответ 1
Заменить глобальную область
$('#input').val().replace(/\n/g, "<br />")
или
$('#input').val().replace("\n", "<br />", "g")
У меня есть текстовое поле, в которое я вставляю \n
при нажатии пользователем. Код из этого текстового поля отправляется в службу WCF через jQuery.ajax()
. Я не могу сохранить \n
в БД, поскольку он не будет отображаться в других приложениях, потребляющих службу.
Как заменить \n
тегом <br />
?
Решение
Хорошо, многие из вас пробовали, а некоторые получили право с Javascript Regex с /g (глобальный модификатор). В конце я дважды вставлял \n, я не знаю, почему, я только предполагаю, что jQuery в событии keypress создан double\n, который я отлаживаю.
$('#input').keypress(function (event) {
if (event.which == '13') {
inputText = $('#input').val() + '\n';
$('#input').val(inputText);
}
});
Заменить глобальную область
$('#input').val().replace(/\n/g, "<br />")
или
$('#input').val().replace("\n", "<br />", "g")
это можно сделать следующим образом:
$('textarea').val().replace(/\n/g, "<br />");
edit: извините... регулярные выражения в javascript не должны цитироваться
Как сказано в комментариях и другом ответе, лучше сделать это на стороне сервера.
Однако, если вы хотите знать, как это сделать на клиентах, это одно простое исправление:
textareaContent.replace(/\\n/g, "<br />");
Где textareaContent
- переменная с данными в текстовом поле.
Изменить: Изменено так, что оно заменяет глобально и не только первое совпадение.
Если вы поддерживаете PHP, вы должны это проверить: http://php.net/manual/en/function.nl2br.php
Основываясь на других ответах, это, вероятно, лучше всего работает php. Теперь, предполагая, что вы не хотите использовать ajax (что было бы бессмысленным и вызвать ненужную нагрузку на сервер), вы должны, вероятно, использовать phpjs.org порт 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');
}
Вы можете использовать простую функцию строки javascript.
string.replace("\n", "<br>")
В вашей службе WCF вы можете не просто использовать String.Replace
?
text = text.Replace("\n","<br />");
var replaced = $('#input').val().replace("\n", "<br/>");
вы можете использовать javascript, встроенный в функцию replace, с небольшой помощью regex, например
$('#input').val().replace(/\n\r?/g, '<br />')
этот код вернет все вхождения, замененные на <br>
Ниже будут заменены все экземпляры \n
на <br />
:
while (message.indexOf("\\n") !== -1) {
message = message.replace("\\n", "<br />");
}