0

変数を表示する HTML/CSS MessageBox を作成する関数があります (既に PHP json_encode() でエスケープされており、XSS インジェクションは不可能です)。この変数をハードコーディングされたメッセージに表示したいのですが、常に同じメッセージです。メッセージは、HTML 太字タグの間に次の変数を表示します<b></b>

Message("Do you really want to delete <b>" + reference + "</b> ?");

Message() 関数に渡される文字列は div タグに追加されます。変数参照を太字で表示したい場合は、innerHTML を使用するしかありません。

多くの人が、「正規化されていない innerHTML を使用しないでください」、「Microsoft 独自の関数です。W3C ではなく、サポートされなくなる可能性があります」と言います。

私は常にDOMメソッドを使用してきましたが、私の場合、文字列がテキストのみとして表示されるため、DOM1 myDiv.firstChild.nodeValue プロパティまたはDOM3 myDiv.textContent メソッドでさえ機能しません。

innerHTML メソッドには<>、HTML エンティティで文字をエスケープしないという利点がありますが、残念ながら DOM メソッドでは同じ結果を得ることはできないと思います。

document.createElement("b") メソッドを使用できません。Message() 関数で完全なスタイル付き文字列を 1 つのパラメーターとして取得する必要があるため、すべてが複雑になります。

だから私の考えでは、物事を複雑にするのではなく、場合によっては innerHTML を使用する必要があり、使用方法によっては悪い習慣ではありません。

コメントをお待ちしております。

4

3 に答える 3

3

反対するほとんどの議論innerHTMLは非常に時代遅れです。 innerHTMLはほぼ普遍的にサポートされており (IE ではいくつかの狭い互換性の問題があります)、現在はHTML5 ドラフトの一部であり、 DOM メソッドよりもはるかに高速で ( EDIT :どうか、コメントを参照してください)、よりクリーンなコードになります。

あなたがしたいことはなくても可能innerHTMLですが、きれいではありません:

var div = document.createElement("div");
var b = document.createElement("b");
b.appendChild(document.createTextNode(reference));
div.appendChild(document.createTextNode("Do you really want to delete "));
div.appendChild(b);
div.appendChild(document.createTextNode("?"));
Message(div);

また、関数をリファクタリングして、テキスト文字列の代わりにMessageDOM Node(または の配列) を取得する必要があります。Node全体として、IE5をターゲットにしている場合を除き、それだけの価値はありません。

于 2012-06-29T13:59:29.047 に答える
0

はい。あなたはinnerHTML対他の方法でなだめるようなquirksmodeベンチマークを読むことができます。

于 2012-06-29T13:51:18.847 に答える
0

使用しても問題ないと確信してい.innerHTMLます。http://www.quirksmode.org/dom/w3c_html.htmlで互換性の統計を確認してください。また、DOMメソッドとは対照的にこのメソッドを使用することによるパフォーマンスの向上も強調されています。

于 2012-06-29T13:52:16.050 に答える