1. ホーム
  2. javascript

[解決済み] IDを持つDOMツリー要素はグローバルプロパティになるのか?

2022-03-22 08:32:49

質問

シンプルなアイデアを考えています HTMLElement ラッパーは、Internet ExplorerとMySQLのために、次のように偶然見つけました。 クローム :

ある HTMLElementid を DOM ツリーで取得することができます。 <div> のプロパティとして、そのIDを変数名として、または window . そのため <div> のように

<div id="example">some text</div>

インターネットエクスプローラー8 とChromeはできます。

alert(example.innerHTML); // Alerts "some text".

または

alert(window["example"].innerHTML); // Alerts "some text".

ということは DOM ツリー内のすべての要素 は、グローバルオブジェクトのプロパティに変換されるのでしょうか?また、これを getElementById メソッドを使用することができますか?

解決方法を教えてください。

の見かけ上のプロパティとして「名前付き要素」が追加されることになります。 document オブジェクトを作成します。これは本当に悪い考えで、要素名が document .

IE は、名前付き要素を window オブジェクトを作成します。これは二重の意味で悪いことです。 document または window オブジェクトを使用することができます。

また、これらの要素はグローバルに近い変数として見えるということです。幸運なことに、この場合、本当のグローバルな var または function の宣言が影を落とすので、ここでは命名についてそれほど気にする必要はありませんが、もし名前が衝突するグローバル変数への代入を行おうとして、その宣言を忘れてしまった場合は、次のようになります。 var IEでは、その値を要素自体に代入しようとしてエラーになります。

を省略することは、一般にバッドプラクティスと考えられています。 var で表示されることに依存するのと同様に、名前付き要素が window またはグローバルとして使用することができます。このため document.getElementById の方が広くサポートされ、曖昧さもありません。もし型付けが嫌なら、もっと短い名前の些細なラッパー関数を書けばいい。いずれにせよ、idから要素へのルックアップ・キャッシュを使う意味はないでしょう。 getElementById の呼び出しは、いずれにせよ迅速なルックアップを使用するため、要素が変更されたときに問題が発生するだけです。 id またはドキュメントから追加/削除されます。

Opera が IE を真似た後、WebKit が加わり、今では以前は標準的でなかった名前付き要素を document プロパティに配置すること、そして以前はIEのみであった window 存在 標準化 HTML5 のアプローチは、ブラウザの作者が私たちに与えたあらゆるひどい習慣を文書化し標準化することであり、それらを永遠にウェブの一部にすることです。そのため、Firefox 4 もこれをサポートする予定です。

名前付き要素」とは何ですか?すべての要素に id であるもの、および name つまり、フォーム、画像、アンカー、その他いくつかのもので、それ以外の無関係な name 属性は、フォームの入力フィールドのコントロール名や <param> またはメタデータタイプで <meta> . '識別' name は避けるべきもので、代わりに id .