0

javascript/html について質問があります。

まず、私はこれを持っています:

var post = document.body.getElementsByClassName("post");  
var x=post[i].getElementsByClassName("MyDiv")[0].innerHTML;  

定義されていないxデバッガーから取得しますが、存在しません。

この JavaScript 関数onloadは本体を実行します。JavaScriptで正しいクラス名を指定したと確信しているので、divが見つかるはずです。

だから、私はどこかで、javascriptがまだそこにないために要素を見つけられないことがあることをどこかで読みました.

この理由により、関数がそのクラス名の div を見つけられない可能性はありますか?

解決策はありますか?

4

2 に答える 2

1

で関数を呼び出す代わりに、 body onloadjQuery のready()関数を使用するか、jQuery を使用したくない場合は、純粋な JavaScript を使用できますが、これはあなた次第です。

// jQuery
$(document).ready(function() {
    var post = document.getElementsByClassName("post"),
    x = post[i].getElementsByClassName("MyDiv")[0].innerHTML;
});

// JavaScript
window.onload = function initialization() {
    var post = document.getElementsByClassName("post"),
    x = post[i].getElementsByClassName("MyDiv")[0].innerHTML;
}

またinnerHTML 、 for ループを実行している場合は、i必ずそのコードを投稿してください。これは重要なことです。

いくつかの議論の後、私の答えはうまくいったようですが、@RobG が提案したように、body タグの最後にスクリプトを配置することもできます。

于 2013-02-03T23:14:19.353 に答える
1

だから、私はどこかで、javascriptがまだそこにないために要素を見つけられないことがあることを読んだ.それはブラウザでまだ作成されていない.

ブラウザーは、マークアップを取得するにつれて、DOM を段階的に作成します。スクリプト要素が検出されると、スクリプトの実行中にマークアップのすべての処理が停止します ( defer と asyncが影響する場合を除く)。スクリプトがまだ作成されていない要素にアクセスしようとすると (おそらくそのマークアップがまだ処理されていないため)、その要素は見つかりません。

この JavaScript 関数は、本体のオンロードを実行します。

それが次のようなものを使用していることを意味する場合:

<body onload="someFn()"...>

多分

<script>
  window.onload = function() {
    someFn();
    ...
  }
</script>

関数が呼び出されると、すべての DOM ノードが使用可能になります。画像のように、完全に読み込まれていないものもありますが、それらの要素は作成されています。

本文にスクリプトがあり、loadイベントを使用していない場合は、スクリプトをページの下部 (終了タグの直前bodyなど) に移動して、問題が解決するかどうかを確認してください。

于 2013-02-04T02:30:24.550 に答える