MACH3

MACH3.laBlog

WEB屋の音速実験室

jQueryの$(document).readyをセレクタで使いたい

jQueryでDOMのロード完了を検知するのに使われる$(document).readyですが、
これを未挿入の要素に対して使いたい。そんなメモログ。

jQueryの$(document).readyをセレクタで使いたい

$(document).ready()について

まず、$(document).ready()について。
引数に渡された関数が、HTMLのDOM構築が完了した時点で呼ばれるという便利機能。

$(document).ready(function(){
    // DOMロード完了時に実行される
    alert("Hello, world !");
});

jQueryを使っていれば一度はお目にかかる定型文ですね。
仕組みについては、こちらの記事が大変詳しく書いてありました。
$(document).ready(f)、bindReady()、$.ready() 解読 ──jQuery解読(32)

$( selector ).onReady();

で、今回は”document”が入っている部分にセレクタを渡して、
その要素がJSで動的に挿入されたタイミングで関数を実行させる… というのが趣旨です。

書いてみたのはこちら。
mach3/js-jquery-onready – GitHub

簡単な使い方

$("#MyContainer").onReady( function(){
    this.append("Hello, world!");
});
$("#hoge").click( function(e){
    $("<div />").attr("id", "MyContainer").appendTo("body");
});

最初は#MyContainerは存在せず、#hogeボタンをクリックする事でbodyに追加されます。
追加されるとそれを検知して、#MyContainerに”Hello, world!”が表示されます。

オプション

内部的には、お察しの通りsetTimeoutでまわしてるだけですが、
そのインターバルと制限時間を第二引数のオプションで設定する事も出来ます。

$("#MyContainer").onReady(
    function(){
        // Do anything.
    },
    {
        "limit" : 30000, // 制限時間(ミリ秒)
        "delay" : 1000 // インターバル(ミリ秒)
    }
);
limit : number = 60000
制限時間。これを超えるとonReadyは諦めます。デフォルトは1分。
delay : number = 500
setTimeoutのインターバル。デフォルトは0.5秒。

いつ使うの?

さして出番は多くないかもしれませんが、
例えば<script>を差し込むタイプのサードパーティのウィジェット等で、
ページ最下部の非表示ブロック内でロードさせておいて、
ロードされたら本来あるべき場所にappendする、等。
多少のページパフォーマンスの向上に役立つかもしれませんね?

あとは、同じくウィジェットの要素からいろいろ抜き取って加工して表示させたい場合などに。

Share |

コメント (3件)

jQuery1.5のsubとthenを使ってRSSリーダーを作る:</gecko>:げことじ。:日常からWEBまで:

[...] 前で「DOMが挿入されたら何か実行する」という動きを実装するには jQueryの$(document).readyをセレクタで使いたい | Mach3.laBlog まっはさんの作ったプラグインで実装出来ました。 1.5にバージョ [...]

HTML+JavaScriptでiPhone/Androidアプリを作れるTitanium Mobileとは(1/3) – @IT と9件… | プログラム、いろいろ。

[...] – @ITjQueryの$(document).readyをセレクタで使いたい | Mach3.laBlog2010年度版・とても参考になったWeb制作関連エントリーまとめ – [...]

Tweets that mention jQueryの$(document).readyをセレクタで使いたい | Mach3.laBlog -- Topsy.com

[...] This post was mentioned on Twitter by webdesignStatio, bsiyo, HR (カトウヒロアキ), まっは, わかめニュース(プログラミング) and others. わかめニュース(プログラミング) said: jQueryの$(document).readyをセ [...]

コメントを投稿する

入力されたメールアドレスは公開されません。


*

「東北地方太平洋沖地震」義援金支援(Yahoo!基金)