9

window.someThingで要素にアクセスする場合、「someThing」はhtml要素の名前である必要があります。しかし、今私が見ているのは、document.getElementByIdがなくても、同じ方法でidによって要素にアクセスできるということです。これはいつ変更されましたか?Chrome、IE、Firefox 13で動作するようですが、Firefox12では動作しません。

例えば:

<div id="MyDiv">Content</div>

<script>
    MyDiv.innerHTML = "New Content";
</script>

上記の例が機能するのはなぜですか?なぜ私はしなければならないのですか:

var MyDiv = document.getElementById('MyDiv');

それは何か新しいものですか、それとも常に可能でしたが、私はそれを知りませんでしたか?

4

4 に答える 4

4

http://www.quirksmode.org/dom/w3c_core.html#gettingelements
IE 5.5 以降に (ほとんど) 実装されています。

IDを変数名として使用することに関する情報は実際には見つかりません。互換性を向上させるために、getElementById("MyDiv").doSomethingの代わりにに固執することをお勧めします。MyDiv.doSomething特に大きなスクリプトを書いている場合、変数名とページで使用されている ID を混同することがあります。getElementByIdDOM要素を確実に「取得」します。

于 2012-11-21T12:51:14.697 に答える
1

それを避けてください!

これはすばらしい機能のようですが、一部のグローバルJS変数と同じIDのdivがある場合は競合し、含まれている他のサードパーティのJSファイルを台無しにするため、使用しないことをお勧めします。 。

しかし、常にjQueryセレクターがあり、最新のブラウザーの新しいquerySelector機能を忘れないでください:)

于 2012-11-21T12:59:06.450 に答える
1

これは JavaScript の標準的な動作ではありません。で行ったように変数を追加すると、プロパティであるかのように直接アクセスできるようvar MyDivに変数がオブジェクトに追加されましたが、DOM 要素は追加されませんでした。windowこの新しい動作の理由は個人的にはわかりませんが、言語エンジンの機能の拡張にすぎないのではないかと思います。動作がどうあるべきかを本当に知りたい場合は、いつでも標準を読むことができます: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

編集:document.getElementById()また、要素を取得するために使用されるメソッドは、ドキュメントオブジェクトモデルからのものであることに注意してください。あなたが参照している方法は、IDによる競合を引き起こす可能性のあるウィンドウオブジェクトにIDを配置することです。標準的に定義された方法は、 から要素を取得し、documentに物を入れないようにすることwindowです。この方法でオブジェクトを使用するwindowことは、グローバル変数を使用することに似ています (これは悪い習慣です: http://www.javascripttoolbox.com/bestpractices/#namespace )

于 2012-11-21T12:55:20.523 に答える
1

ここで答えを見つけることができます: Can I Use an ID as a Variable Name?

要するに、それを避けてください。

それが機能する理由は、ブラウザが実際に変数を作成するためですwindow.document.myDiv

于 2012-11-21T13:05:57.133 に答える