13

些細な質問のように思えるかもしれませんが、jQuery の使用中に問題が発生しました。.ready 内の要素の高さを取得しようとすると、常にゼロが与えられます。

$(function() {
  $('#my-elem').height() // Always gives me zero.
});

高さチェックの前後に setTimeout() を使用してコードを遅延させた場合 (たとえば .5 秒)、高さは正しく報告されます。これは、スタイルがまだ適用されていないためだと思いますか?

この問題に対して私が見つけた唯一の解決策は、間隔を使用して要素の高さがゼロ以外になるまでポーリングすることですが、これはやり過ぎのように思えます。より良い方法はありますか?

4

1 に答える 1

23

このdocument.readyイベントは、HTML DOM が Javascript 経由でアクセスできるようになったことを通知しますが、要素が既にレンダリングされていることを意味するわけではありません

実際、それが背後にあるすべてです。これは、ページの読み込みが完了するのを待たずにready、ドキュメントの HTML DOM の操作を開始するための手段です。では、要素がまだページに表示されていないと想定しても問題ありません。document.ready

ここで注意が必要です: 要素がまだレンダリングされていない場合、ブラウザー/Javascript はどのようにしてその解像度の高さを知ることができるのでしょうか? .height()このため、 at が 0 になる場合がありますdocument.ready。レイアウトからボックスの寸法を取得するときではloadなく、それまで待つのがおそらく最善です。ready

于 2012-06-20T09:31:02.197 に答える