如何使用jQuery获取textarea的文本并保留换行符?

我有一个用户输入文本的文本区域。 我想检索用户输入的文本,包括自动换行的新行字符。 如何使用jQuery获取textarea的文本并保留换行符?

鉴于您的编辑,如果不是不可能的话,它将变得相当困难。 问题是自动换行实际上并没有插入任何换行符,只是浏览器将多个行中的一个字符串呈现出来……所以我能想到的唯一方法是尝试编写一些代码来估计换行符的位置根据textarea的宽度渲染并手动插入它们。

因此, 如果您的文本区域没有CSS宽度设置使用cols="xx"属性使用固定宽度字体并且您始终显示滚动条(这会影响textarea的渲染范围,请注意这一点基于cols ),那么你应该能够计算单行上显示的单词数,然后通过这样的方式自动包装在浏览器中:

 //Based off  var words = $("#text").val().split(" "); var cols = $("#text").attr("cols"); var text = ""; var lineLength = 0; for (var i = 0; i < words.length; i++) { var word = words[i]; if ((lineLength + word.length + 1) > cols) { text += "\n"; lineLength = 0; } else if (lineLength > 0) { text += " "; lineLength++; } text += word; lineLength += word.length; } alert(text); //Alerts: //This is a test sentence, with no newline //characters in it, but with an automatically //wrapped sentence that spans three lines. 

然而,这很多, 如果 s,我不知道这对所有浏览器有多好(我测试了它,它似乎在Firefox 3.6中工作)…

另请注意,如果你沿着这条路走下去,那我的自动换行代码非常简陋,几乎可以保证不会与浏览器在所有情况下的操作相匹配,因此您可能需要根据您的具体要求进行扩展。 例如,长于cols长度的单词会被firefox拆分,但不会被我的代码拆分。

你需要用br标签替换“\ n”或者在pre中包装内容以查看下一行。

这是一个示例代码:

假设你有这样的页面标记:

 

那么这是jquery代码:

 $(document).ready(function() { var btn = $('#btn'); var txtarea = $('#txtarea'); var result = $('#res'); btn.click(function() { var val = txtarea.val().replace(/\n/g, '
'); result.html(val); return false; }); });

我希望这有帮助。

I want to keep automatically wrapped newlines.

你不能这样做,因为那里没有换行符。 Textarea控件正在为您进行视觉包装。 除非您输入,否则没有新行。