web-dev-qa-db-ja.com

getElementByIdはnullを返しますか?

document.getElementById('id of div that definately exists')はnullを返します。

Onloadイベントについて心配する必要がないことを確認するために、もともとjavascriptを最後にロードしました。また、onloadイベントを使用してみました。とても不気味です。どんなアイデアや助けも大歓迎です。

37
Sheena

原因は次のとおりです。

  1. 無効なHTML構文(一部のタグが閉じられていない、または同様のエラー)
  2. 重複したID-同じIDを持つ2つのHTML DOM要素があります
  3. IDで取得しようとしている要素は動的に作成されます(ajaxでロードされるか、スクリプトで作成されます)。

コードを投稿してください。

45
PanJanek

また、ページでjsを実行する方法にも注意してください。たとえば、次のような場合:

(function(window, document, undefined){

  var foo = document.getElementById("foo");

  console.log(foo);

})(window, document, undefined); 

ロードされる前にドキュメントを呼び出すため、これはnullを返します。

より良いオプション..

(function(window, document, undefined){

// code that should be taken care of right away

window.onload = init;

  function init(){
    // the code to be called when the dom has loaded
    // #document has its nodes
  }

})(window, document, undefined);
51
cameronroe

document.getElementByIdが機能しない多くの理由が考えられます

  • 無効なIDがあります

    IDトークンとNAMEトークンは文字([A-Za-z])で始まる必要があり、その後に任意の数の文字、数字([0-9])、ハイフン( "-")、アンダースコア( "_")を続けることができます、コロン( ":")、およびピリオド( "。")。 (リソース: HTMLのid属性の有効な値は何ですか?

  • ヘッダーで<meta>名として既に使用しているID(​​著作権、著者など)を使用しましたが、奇妙に見えますが、私には起こりました。IEを使用している場合は、リソース: http://www.phpied.com/getelementbyid-description-in-ie/

  • フレームまたはiframe内の要素をターゲットにしている。この場合、iframeが親の同じドメイン内のページをロードする場合、要素を探す前にcontentdocumentをターゲットにする必要があります(リソース: フレーム内の特定のIDを呼び出す

  • ノードがDOMに効果的にロードされていない場合、または単純なつづりの間違いである場合、単に要素を探しているだけです。

同じIDを2回以上使用したとは思えません。その場合、document.getElementByIdは少なくとも最初の要素を返す必要があります

8
fcalderan