如果文本中包含换行符,我在使用“可编辑”文本块时会遇到一些麻烦。
我有两个元素,div
和textarea
。当用户单击编辑时,我有以下代码来填充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()行完全没有效果,无论我用它做什么。
我确信我在这里遗漏了一些明显的东西,但我不能为我的生活弄清楚它是什么。
答案 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");