帖子中的代码已修改。
我在想用 javascript 将\n 替换为
是一个非常简单的任务,但似乎并非如此。帖子在Ask Ben或 StackOverflow建议像这样简单的事情:
var myRe = new RegExp(/\r?\n/g); // to avoid the re literal caching problem
lDes = $("div.descr").html();
lDes = lDes.replace (myRe, "<br/>");
lDes = lDes.replace (/(http:\/\/\S+)/g, "<a target=\"blank\" href=\"$1\">$1</a>");
$("div.descr").html(lDes);
将完成工作。事实上,这在 FF 和 Safari 中有效,但在 IE 中无效。
或者,使用 postie (很好的提示!)
文本已在文本区域中创建,然后存储在数据库中,然后无需进一步处理即可检索。它在 Windows 上使用 FF,在 Mac 上使用 Safari。 Windows 上的 IE,nada。这是我脑子里的一个主要错误吗?这是一个 JQuery 问题吗?
知道如何解决这个问题吗?可能的原因是什么?
非常感谢
最佳答案
而不是将有问题的文本放入 <div>
在页面上,也许你可以将它直接放入一个 Javascript block 中。现在这将需要您有一些服务器端代码来“保护”Javascript 字符串常量语法,这是一种非常罕见但易于创建的设施。您只需确保引号字符以及控制字符和 7 位范围之外的字符按照 Javascript 期望字符串常量的外观进行适当“转义”。
这是它在我的一个应用程序中的样子。这是一个 Java/JSP 示例,所以可能不是您正在使用的,当然我调用的“转义”函数是我自己发明的,但只是为了让您明白我的意思:
var theText = '${pointy:escapeJS(data.theText)}';
$('#target').html(theText.replace(/\n/g, '<br>'));
当然,如果您接收的是 AJAX 响应文本,事情就简单多了。
现在该示例遗漏了一些重要内容:您必须确保在将文本放入文档之前对文本进行 HTML 转义。也许这是在服务器端完成的,或者如果没有,您也可以在 Javascript 中完成:
$('#target').html(theText
.replace(/\r/g, '') // get rid of carriage returns
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/\n\n/g, '\n \n')
.replace(/\n/g, '<br>')
);
(当然有更好/更快的方法来进行 HTML 转义;这只是一个例子。)请注意,我在连续的换行符之间添加了明确的空白填充 - 这是我从我拥有的一些代码中抄袭的东西,我认为我这样做是因为连续<br>
没有干预“东西”的元素可能不会在结果中给出多个空行;但是不确定。
关于Javascript:用 <br/> 替换换行符在 FF 和 SAFARI 中工作而不在 IE 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2781054/