2012-06-04 23 views
7

私は改行とマルチスペースで書式設定された文字列を持っています。それらをテキストノードに追加したいと思います。Javascriptクロスブラウザの改行で書式設定されたテキスト

<pre id="bar"></pre> 

<script> 
    var string = "Preformatted" 
       + "\n" // \r, \r\n, \n\r or what else? 
       + "multispace  string"; 
    var text = document.createTextNode(string); 
    document.getElementById('bar').appendChild(text); 
</script> 

私はラインブレーカーとして採用することを試みた:すべてのブラウザで

  • \nブレイクラインが、IE(私は7でテストしています)に
  • \rブレイクラインだけのスペースとなりIE
  • \r\n二行目の先頭にスペースがすべてに恐怖
  • \n\rもokですすべてのブラウザではなく、IEで作品、BU IEの最初の行の最後のスペースは私のレイアウトには受け入れられません。

<br>とinnerHTMLは、IEがマルチスペースを崩壊させるため使用できません。
jQuery .text(string)の動作はまったく同じ.appendChild(createTextNode(string))

どのようにブラウザ間の改行を挿入できますか?
最終的に、ブラウザが\nまたは\rをサポートしているかどうかを簡単に検出できますか?

+0

あなたはjQueryを使用しているようではありませんが、これがあなたが探しているものなのかどうかは分かりませんが、 'if($ .browser.msie){/ *}ここでは* /} 'と残りは普通ですが、jQueryを使用するか、jQueryのソースに行き、' $。browser.msie'の実装を取得して同じチェックを適用し、他のブラウザとは違って処理する必要があります。 – MilkyWayJoe

+0

**ライブデモ:** http://jsfiddle.net/RMeML/1/ –

+0

@MilkyWayJoe:javascriptソリューションがない場合、jQueryを使用できます。 – Salvador

答えて

7

これは私がテストしたすべてのブラウザ(サファリ、オペラ、クロム、Firefoxの、IE7、IE8、IE9)で動作するように見えた:

http://jsfiddle.net/4bQ5Q/1/

コード:ところで

var textarea = document.createElement("textarea"); 
textarea.value = "\n"; 
var eol = textarea.value.replace(/\r\n/, "\r"); 

var string = "Preformatted" + eol + "multispace  string"; 

var text = document.createTextNode(string); 
document.getElementById('bar').appendChild(text);​ 
+0

私はその変数の名前を 'EOL'に変更し、それをグローバルにしてIIFEを使って値を計算します:http://jsfiddle.net/XsLME/ –

+0

@ imeVidasは':]を編集してください ' – Esailija

+0

私は大丈夫です私のコメントで: ') –

4

IEはおそらく変数に文字を格納し、必要に応じてそれを変更するconditional commentsを使用し、奇数1アウトのようですので:

<script> var $LF = '\n'; </script> 
<!--[if lt IE 8]> 
    <script> $LF = '\r'; </script> 
<![endif]--> 

<script> 
    var string = "Preformatted" 
       + $LF 
       + "multispace  string"; 
    var text = document.createTextNode(string); 
    document.getElementById('bar').appendChild(text); 
</script> 

あなたのスニペットは、このように、少なくともIE8で正しく表示されているように見えるんlt IE 8状態。

+0

IEテストをありがとうございます。 しかし、私はポイントがIEかどうかを検出するのではなく、ブラウザーが(関係なく)「\ r」または「\ n」を正しく表示していると考えます。 – Salvador

2

クロスブラウザーのような簡単な解決策が見つかりました:
innerHTMLブルートゥース<pre>面付け

<div id="bar"></div> 

<script> 
    var string = "Preformatted \n" 
      + "string \r" 
      + "with \r\n" 
      + "assorted \n\r" 
      + "line breaks"; 
    document.getElementById('bar').innerHTML = "<pre>"+string+"</pre>"; 
</script> 

\r\nが単一のリターン
\n\r二重リターンなる

不整:IE 10互換モード7最後の行の末尾にスペースを追加します。

+0

それは働いた。ありがとう! –

関連する問題