jQuery を扱うとき、多くは下記のようなコードで実装していると思います。
$(function() { // ここに処理内容を書く });
ここで使われる「$(function(){〜});
」は略式で、展開すると $(document).ready(){〜});
と同じ意味になります。
また似たようなもので「$(window).on('load', function(){〜});
」というコードも存在します。
古いバージョンでは $(window).load(function(){〜});
が使えましたが、jQuery3.0 以降では $(window).load(function(){〜});
は使えないので注意してくださいね。
$(document).ready(function() { // ここに処理内容を書く });
$(window).on('load', function(){ // ここに処理内容を書く });
今回説明するのはこの2つのコードの違いについてです。
「$(document).ready(function() {});」と「$(window).on('load', function(){});」との違いとは?
まず、セレクタが「document」と「window」という点で異なります。
jQueryメソッドも「ready」と「on」と分かれているので、そもそも違うコードだという点は理解できるかと思います。
しかし、実際の挙動は「同じように見える」んですよね。
では何が違うのか?
そもそもこの2つは実行されるタイミングが違います。
順序でいえば、「$(document).ready(function(){});」が先に、続いて「$(window).on('load', function() {});」が実行されます。
詳しくは以下のとおり。
- [$(document).ready(function(){});] … DOMが構築されたら実行される。
- [$(window).on('load', function() {});] … 使用される画像などを含め、ページが完全に読み込まれたら実行される。
つまり、ブラウザに表示されている画像の大きさを取得したい場合、「.on('load')」ではできますが「.ready()」ではできない、というワケです。
$(document).ready(function() { // 表示されている画像の大きさを取得 → できない × }); $(window).on('load', function() { // 表示されている画像の大きさを取得 → できる ○ });
さて。先に説明したように、[$(document).ready(function(){〜});
]は[$(function(){〜});
]と省略できます。
通常、何も考えずにjQueryを書くときは[$(function(){〜});
]で充分ですが、場合によっては臨機応変に[$(window).on('load', function() {〜});
]を使う必要があることを覚えておきましょう。