1

現在、innerHTMLを使用してHTML要素のコンテンツを取得していますが、一部のブラウザでは、ソースにあるものが正確に返されないことがわかりました。

たとえば、FirefoxでinnerHTMLを次の行で使用します。

<div id="test"><strong>Bold text</strong></strong></div>

戻ります:

<strong>Bold text</strong>

IEでは、2つの終了する強力なタグを含む元の文字列を返します。ほとんどの場合、Firefoxが誤ったコードをクリーンアップすることは問題ではない(そして利点になるかもしれない)と思います。ただし、私が達成しようとしていることについては、元のHTMLソースに表示されているとおりの正確なコードが必要です。

これは可能ですか?私たちができる別のJavascript関数はありますか?

4

6 に答える 6

3

最近のブラウザでは、間違ったHTMLコードを受け取ることはないと思います。そして、動的に生成されたHTMLのソースがないため、これは正しい動作です。たとえば、Firefoxは文字列で表されたDOMツリーinnerHTMLの一部を返します。HTMLソースではありません。とにかく2番目のタグはブラウザによって無視されるため、これは問題ではありません。</strong>

于 2010-01-13T20:07:32.307 に答える
2

innerHTMLドキュメントの実際のソースからではなく生成されます。HTMLファイルですが、ブラウザによってレンダリングされるDOMオブジェクトから派生しています。したがって、IEが何らかの形で誤ったHTMLコードを表示する場合は、おそらく何らかのバグです。すべてのブラウザで無効なHTMLコードを取得するような方法はありません。

于 2010-01-13T20:08:38.713 に答える
1

IvanとAndrisが言った理由により、通常、元の無効なHTMLを取得することはできません。

IEは、Firefoxと同じようにコードを「修正」しますが、シリアル化では気付かない方法で/strong、偽の終了タグに対応するtagNameを使用してElementノードを作成します。IEが解析/シリアル化サイクルを通じて他の無効なマークアップ構造を保持するという保証はまったくありません。

実際、有効なコードであっても、の出力はinnerHTML入力とまったく同じにはなりません。属性の順序が維持されない、tagNameの大文字と小文字が維持されない(IEが提供する<STRONG>)、空白がさまざまな場所で失われる、エンティティ参照が維持されないなど。「正確なコードが必要」な場合は、正確なコードのコピーを保持する必要があります。たとえば、<script>問題のコンテンツの後に記述されたブロック内のJavaScript変数に保持する必要があります。

于 2010-01-13T20:27:25.553 に答える
1

レンダリングにHTMLが必要ない場合(たとえば、JSテンプレートなどとして使用する場合)、HTMLをテキスト領域に配置し、innerHTMLを使用してコンテンツを取得できます。

<textarea id="myTemplate"><div id="test"><strong>Bold text</strong></strong></div></textarea>

その後:

$('#myTemplate').html() === '<div id="test"><strong>Bold text</strong></strong></div>'

それ以外は、ブラウザはHTMLの解釈方法を決定し、元の解釈ではなく、その解釈のみを返します。

于 2010-01-16T04:50:08.790 に答える
0

innerTEXT?それとも同じ効果がありますか?

于 2010-01-13T19:59:37.410 に答える
0

プロパティを使用する必要がありinnerXMLます。それはまさにあなたが達成したいことをします。

于 2010-01-13T20:06:22.997 に答える