如何保留换行符

时间:2012-09-15 22:47:20

标签: javascript jquery html

换行符和回车符......必须是编码中最复杂的部分。 (对我来说)

将此代码放在一个页面中(来自存储为This from Ricardo\nAnd also a test\nRent 3000.00的数据库):

<td title="This from Ricard
And also a test
Rent 3000.00" style="width:198px;text-align:left">....</td>

然后使用它来获取带有'hidden'\ n的

的title属性
var v = $('#'+i).parent().attr('title');        // i = id of <span> child of <td>

一路上,换行符丢失并将变量v用于文本输入框:

This from RicardAnd also a testRent 3000.00

如何保留\n's并将其外观改为如下所示?

Screenshot of desired result (with \n's present) after clicking edit

6 个答案:

答案 0 :(得分:14)

换行符仍然存在,只是浏览器尝试渲染它们。

如果您仍想查看“\ n”,请尝试以下操作:

var v = $('td:first-of-type').attr('title').replace(/\n/g, "\\n");

否则,如果你想要的不是看到“\ n”而是看到换行符,你可以这样做:

var v = $('td:first-of-type').attr('title').replace(/\n/g, "<br/>");

选中此JSBin

答案 1 :(得分:2)

您可以使用javascript全局方法escape()对字符串v进行编码,并使用unescape()对其进行解码以供使用。

这是你的小提琴

http://jsfiddle.net/jYNKG/

在您的代码中,此行可以像这样

var v = escape($('#'+i).parent().attr('title'));

答案 2 :(得分:1)

好吧,如果您将字符串放入文本输入框,则不会有新行,因为文本输入框是仅限单行文本。 < / p>

\n就在那里 - 您可以尝试通过它们进行拆分:

lines = str.split("\n")

答案 3 :(得分:0)

这个问题让我很好奇,所以我必须查看来源:http://www.w3.org/TR/html401/struct/global.html#adef-title

W3C对属性中各种形式的空白处理方式完全保持沉默,因此我强制假设它遵循与HTML相同的规则。

在HTML下,除非在<PRE>元素或类似CSS规则下,否则所有空格都会折叠到单个空格进行渲染。

因此:

<p>The    quick  brown
fox
jumped



over the
lazy dog</p>

与以下内容相同:

<p>The quick  brown fox jumped over the lazy dog</p>

此HTML行为与用户代理(浏览器)可能以任何方式呈现TITLE属性的事实相结合,使得大多数(如果不是全部)此类代理可能没有理由保留结束行标记(carriage returnnewline\r\n)。

编辑:

如果格式很重要,title文本可以转义并放入data-*元素中。使用鼠标悬停,自定义弹出框可以显示格式化的HTML。

编辑2 - 取自原始问题:

<td data-title="This from Ricard<br><br>And also a test<br>Rent 3000.00"
style="width:198px;text-align:left">
 ....
</td>

您可以在此处详细了解data-*属性:http://www.javascriptkit.com/dhtmltutors/customattributes.shtml

简而言之,在某些mouseover代码中,您可以找到以下文字:

var mytitle = <element>.getAttribute("data-title");

然后使用弹出式div显示mytitle

答案 4 :(得分:0)

您需要直接从数据库中读取此内容。在为站点生成HTML时,将解释行结尾,这就是您在代码中看到多行td元素的原因。

当你去引用那个td元素时,它会在一行中吐出值。一旦这些数据丢失,您就无法以任何方式重新创建它。

答案 5 :(得分:0)