2016-10-03 70 views
0

我有一组注释显示不正确。查看来源,有&#xd;&#xa;这里应该是换行符。我想用<br>替换这些实例。我已经使用了一个小书签,它可以用于明文字符串,如ABC,但对于给定的字符串不起作用。使用javascript正则表达式替换字符实体

例如,这个工作得很好:

javascript:(function(){var re = new RegExp("ABC", "g"); document.getElementById('my_span').innerHTML=document.getElementById('my_span').innerHTML.replace(re, "<br>");})();

然而,这并不:

javascript:(function(){var re = new RegExp("&#xd;&#xa;", "g"); document.getElementById('my_span').innerHTML=document.getElementById('my_span').innerHTML.replace(re, "<br>");})();

奇怪的是,后者将采取&#xd;&#xa;的第一个实例,只是将其删除无需替换它。

我正在使用的页面不会加载jQuery,而且我在公司环境中工作,所以我不喜欢调用外部的东西。

这是否与innerHTML一样没有收到&#xd;&#xa;,因为我预计它会?非常感谢您的帮助。

回答

0

这就像你说的:innerHTML没有收到你期望的那些字符。将字符实体插入HTML会导致它们被解释,并且innerHTML返回解释版本,而不是原始版本。如果您有:

<p id="test">Cookies &amp; Cream</p> 

,并使用:

document.getElementById('test').innerHTML; 

你没有得到:

Cookies &amp; Cream 

你:

Cookies & Cream 

同样,当你”在你的小书签中使用innerHTML,你就是没有得到&#xd;&#xa;:你得到一个回车和一个换行符。

要使这些字符与正则表达式匹配,请使用\r\n\r将匹配回车(&#xd;)。而\n将与换行符(&xa;)匹配。

var regex = new RegExp('\r\n', 'g'); 
+0

是的,这对Chrome的魅力,谢谢。然而,我进入办公室并且失败了 - 在控制台中拉动innerHTML向我显示,实际上没有任何线路断点存在的地方。 IE11。 javascript扩展了'span'中'tr'元素之间的空间。我知道'tr'只能在IE中读取,但我可以改变'span'。令人沮丧!有任何想法吗? – Tris

+0

你是说你在'

'内有''元素?这应该是不可能的。 Chrome和IE11都应该将''元素从表格中取出,并将其放在DOM中的表格之前。如果浏览器正在重新排列DOM,那么您的序列可能会在id为“my_span”的元素之外。试试'document.body.innerHTML = document.body.innerHTML.replace(re,'

Hello

');'这会告诉你,如果你试图匹配的序列是你期望的序列。 – ideoderek

+0

啊不,'表'在'span'里面。任何其他字符串都可以被替换,但问题是在'innerHTML'中没有什么应该是中断。打开控制台,并拉它看看我得到什么。奇怪的是,在源代码中(每个“td”内)有' '的实例。很快开始放弃IE。在我的深处 - 这是拖着脚跟,我想暂时修复。 – Tris