3

私はそのようなコードを Firefox に入れました:

<div id="my">
    <div title="&lt;b&gt; title &lt;/b&gt;">&lt;b&gt; text &lt;/b&gt;</div>
</div>

評価後:

document.getElementById("my").innerHTML

私が得た:

"<div title="<b> title </b>">&lt;b&gt; text &lt;/b&gt;</div>"

ご覧のとおり、タイトル属性が破損しています...これはバグですか?

遊び場へのリンク: http://jsfiddle.net/uGXQP/

更新Firefox と Opera でテストを実行しました - 再現しました。Chrome では期待どおりに動作します。

更新 2この問題を見つけて、http://code.google.com/p/canvg/プロジェクトで作業します。入力引数として文字列としてSVGを必要とするメインルーチンがあります。これを行う自然な方法は、innerHTMLを使用することです ...

したがって、このライブラリは DOM を文字列として解析し、適切に処理できません<>属性値でストリーミングされる文字...

4

2 に答える 2

3

通常、innerHTMLプロパティは HTML ソース ドキュメントのマークアップを提供しません。代わりに、DOM 内の要素のコンテンツのシリアル化を実行します。これに関する標準はまだありませんが、HTML5 CR はHTML フラグメントをシリアライズするためのルールを指定しており、DOM の解析とシリアライゼーションWD はinnerHTMLそのようなシリアライゼーションに関して定義しています。これは、マークアップの多くの部分が正規化されることを意味します。これには、属性値内の文字「<」の原則が含まれます。として表示されます。HTMLのように書く&lt;と「<」に変換されていました。解析中 – DOM には、「<」を表すために使用される元の構文に関する情報がありません。残念ながら、一部のブラウザはこれを誤解しています。

とにかく、属性値に 4 文字を含めたい場合は&lt;、アンパサンドがエスケープされるように記述する必要があります&amp;lt;

于 2013-08-05T15:20:05.673 に答える
2

いいえ、バグではありません。属性値を表現する 2 つの方法は同等です ( は&属性値内で特別な意味を持ちますが、そうで<はないため)。傷んでいるのではなく、表現を変えただけです。

&属性値に文字を格納する場合は、 のようにし&amp;ます。

属性値を取得したい場合は、 で行いますelement.getAttribute

于 2013-08-05T13:19:23.713 に答える