2012-04-20 13 views
0

私の問題は次のコードです! 私はXQueryオブジェクトにjQueryオブジェクトを拡張したいと思っています。 しかし、私がオブジェクトを見つける各関数において、関数myfuncは宣言されていません ここで何が間違っていますか?jQueryオブジェクトを自分のオブジェクトに拡張します

歓声とeachインサイド

私の下手な英語のため申し訳ありません

XjQuery = function() 
    {   
     var jq = $("<div id=xjq>hallo</div>"); 
     $.extend(this, jq); 
    } 
    XjQuery.prototype.myfunc = function() { 
     this.append("<p>myfunc called</p>"); 
    } 
    xjq = new XjQuery(); 

    xjq.myfunc(); // this works 
    $("#maindiv").append(xjq); // works also 
    $("#maindiv").find("#xjq").each(function() { 
     $(this).myfunc(); // doesn't work 
    }); 

答えて

2

thisは、ネイティブのDOM要素であり、そして$(this)はjQueryオブジェクトです。 jQueryオブジェクトをxjQueryオブジェクトに「変換する」必要があります。

なぜxJqueryオブジェクトを最初に作成していますか? jQuery pluginを作ってみませんか?

jQuery.fn.myfunc = function() { 
    this.append("<p>myfunc called</p>"); 
}; 

次に、$("#maindiv").myfunc()を実行できます。

EDIT:xjQueryオブジェクトとして "キャスト" jQueryオブジェクトには、あなたがこのようなコンストラクタを変更することができます。

XjQuery = function(jq) 
{   
    jq = typeof jq === 'undefined' ? $("<div id=xjq>hallo</div>") : $(jq); 
    $.extend(this, jq); 
} 

次に、あなたが行うことができます:

$("#maindiv").find("#xjq").each(function() { 
    new XjQuery(this).myfunc(); 
}); 
+1

ロケットは、右の正しいです拡張機能をjQueryに追加する方法は、プラグイン経由です。これらの拡張は '$'オブジェクトの通常のメソッドとして表示されます。例: '$( '#a-div-id')。myPluginMethod(anArgument、anotherArgument)' –

+0

[プラグインのjQueryドキュメント](http://docs.jquery.com/Plugins/Authoring)は忘れました。 –

+0

私の拡張はjQueryから拡張されるより多くの異なるオブジェクトを持ち、各オブジェクトは異なるメンバ関数を持っています – helmi

関連する問題