String.replace()不替换换行符(或者任何东西,就此而言)

时间:2011-01-14 06:18:19

标签: javascript jquery regex

如果文本中包含换行符,我在使用“可编辑”文本块时会遇到一些麻烦。

我有两个元素,divtextarea。当用户单击编辑时,我有以下代码来填充textarea:

text = $('#div').text();
$('#div').replaceWith('<textarea id="textarea"></textarea>');
$('#textarea').val(text);

当用户完成编辑并单击“保存”后,我有以下内容:

text = $('#textarea').val();
text.replace(/\n/g, "<br />\n");
$('#textarea').replaceWith('<div id="div"></div>');
$('#div').html(text);

但是,如果div最初有多行(带有<br />标签),如果单击编辑然后保存,则所有换行符都会消失。

我已经使用Firebug尝试了解发生了什么,但看起来String.replace()行完全没有效果,无论我用它做什么。

我确信我在这里遗漏了一些明显的东西,但我不能为我的生活弄清楚它是什么。

3 个答案:

答案 0 :(得分:4)

text.replace()不会替换原始文本。 返回替换后的文字。

text = text.replace(...)

答案 1 :(得分:3)

String个对象是不可变的,也就是说,它们无法修改。

考虑到这一点,所有“看似变异的”String方法(例如replace()substring()charAt()等)都会返回new String和不要修改调用该方法的对象。

因此,为了使其正常工作,您需要存储replace()的返回值,甚至可以将原始变量重新分配给返回值:

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

答案 2 :(得分:2)

将替换结果重新分配回原始变量:

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

如果您在使用某项功能时遇到问题,通常最好先阅读documentation

  

<强>描述

     

此方法不会更改调用它的String对象。它只返回一个新字符串。

     

...

     

<强>实施例

var re = /apples/gi;
var str = "Apples are round, and apples are juicy.";
var newstr = str.replace(re, "oranges");