2016-10-03 6 views
0

私は正しく表示されていない一連の音符を持っています。ソースを見ると、改行があるはずの&#xd;&#xa;があります。これらのインスタンスを<br>に置き換えたいとします。私はABCのような平文文字列で動作するブックマークレットを使用しましたが、指定された文字列に対しては機能しません。javascript regexを使って文字エンティティを置き換える

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

これがないのに対し:たとえば、この1つは正常に動作します

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とは関係がありますか?あなたの助けをありがとう。

答えて

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、 '

こんにちは

')を試してみてください。一致させようとしているシーケンスが期待どおりの場所に表示されます。 – ideoderek

+0

ああ 'テーブル 'は'スパン 'の内側にありません。他の文字列は置き換えることができますが、問題は 'innerHTML'に改行があるべきものがないということです。コンソールを開き、私が得ているものを見るためにそれを引っ張った。ソースに ' 'のインスタンスがある(各 'td'内にある)ことを考えると、奇妙で​​す。喜んですぐにIEを捨てます。私の深いところから - それは彼らのかかとを引っ張って、私は一時的な修正をしたい。 – Tris

関連する問題