4

Internet Explorer では、プリティファイ ( http://code.google.com/p/google-code-prettify/PRE ) を使用すると、 のスタイルのwhite-space:nowrapコードがPRE1 行に表示されます。

<br/>aは a に改行を引き起こすはずではありませんPREか? ページが読み込まれた後に prettify によって生成された HTML ソースを確認したところ、<br/>改行が発生したときに生成されました。

例については、 http://blog.mikecouturier.com/2009/12/google-street-view-with-google-maps_27.htmlをご覧ください。

これは FF や Chrome では発生しません。

ありがとう

編集:これはこれに関連している可能性があります:プリタグに改行を挿入する(IE、Javascript)

4

2 に答える 2

4

Internet Explorer innerHTML Quirkから:

HTML 要素の innerHTML プロパティはよく知られており、広く使用されています。要素などを含む、要素の完全なコンテンツを一度に設定できます。QuirksMode テストが示して いるように、innerHTML はページ コンテンツを動的に変更する最速の方法です。

ただし、innerHTML は Internet Explorer では問題があります。

HTML 標準では、コンテンツの表示に関する変換が必要です。すべての種類と量の隣接する空白は、1 つのスペースにまとめられます。これは良いことです。例として、このソース ファイルに多くの改行を追加しても、表示されるテキストの変な改行について心配する必要はありません。

Internet Explorer は、innerHTML プロパティへの割り当て時にこれらの変換を適用します。これは良い考えのように思えます: メモリ内表現が既に正規化されている場合、ブラウザはテキストを表示する必要があるたびに正規化する必要がないため、表示中の時間を少し節約できます。

ただし、正規化規則には例外があります。特に、これらは<textarea>要素、<pre>要素、および CSS 対応ブラウザでは空白プロパティの通常以外の値を持つ要素です。

Internet Explorer は、これらの特殊なケースを考慮しません。3 つ目は、DOM などを介して実行時に空白が変更される可能性があるため、最適化をお勧めしません。いずれにせよ、Internet Explorer は、innerHTML プロパティへのすべての割り当てを正規化します。

これは別の IE のみの「バグ」です (たとえ innerHTML を発明したのが彼らであっても)。最初のリンクにはこの問題の解決策がありますが、ルーカスが指摘したように、すべてがあなたが制御できないGoogleのコードを指しているようです。

于 2010-07-09T14:08:35.593 に答える
2

そうです、バージョン IE6 と IE7 では、preタグ コードは 1 行で表示されます。ブラウザー IE6 および 7 のみにこの小さな修正を追加しました。

<br>実際にタグをタグに置き換えているため、少しハックですが<p>、IE6 と 7 ブラウザーで視覚的な違いは発生しません。

このコード スニペットは、HTML ページのどこにでも追加できます。jQueryを使用しています。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<script>
$(document).ready(function(){
    // this BR issue seems to happen only in browser
    // msie version 6.0 and 7.0
    if($.browser.msie && ($.browser.version == "6.0" || $.browser.version == "7.0")) {

        // replace all <br>s in the .prettyprint section
        // with <p> tags. <p> tags have the same visual behavior as <br> tags
        // in IE 6 and 7
        $(".prettyprint br").each(function(){
            $(this).replaceWith($("<p></p>"));
        });

    }

});
</script>

Google が IE6 & 7 用の prettify コードを修正するまでは、これがおそらく最良の選択肢です。

于 2010-07-07T16:00:14.037 に答える