Javascript:用 <br/> 替换换行符在 FF 和 SAFARI 中工作而不在 IE 中工作

标签 javascript

帖子中的代码已修改。

我在想用 javascript 将\n 替换为
是一个非常简单的任务,但似乎并非如此。帖子在Ask BenStackOverflow建议像这样简单的事情:

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, '&amp;')
  .replace(/</g, '&lt;')
  .replace(/>/g, '&gt;')
  .replace(/\n\n/g, '\n&nbsp;\n')
  .replace(/\n/g, '<br>')
);

(当然有更好/更快的方法来进行 HTML 转义;这只是一个例子。)请注意,我在连续的换行符之间添加了明确的空白填充 - 这是我从我拥有的一些代码中抄袭的东西,我认为我这样做是因为连续<br>没有干预“东西”的元素可能不会在结果中给出多个空行;但是不确定。

关于Javascript:用 <br/> 替换换行符在 FF 和 SAFARI 中工作而不在 IE 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2781054/

相关文章:

Javascript ES6 Const 可以在不允许时更改

php - 登录时禁用 Javascript 执行

javascript - java脚本填充一个数组,使其匹配以下结构

javascript - Vercel Next js 未捕获( promise )ChunkLoadError : Loading chunk 0 failed

javascript - 单击按钮更改选项卡

javascript - Electron:Firebase 和 Facebook 身份验证?

javascript - WebSockets 和文本编码

Javascript argument.callee 的用途是什么

javascript - 使用相同的正则表达式继续查找字符串

javascript - 为什么 PhantomJS 会调用两次 onResourceReceived ?