2016-10-03 39 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