あなただけaddProduct
と方法はその単一 jQueryオブジェクトに特色にしたい場合は、あなたが正常に動作します持っているもの。そのjQueryオブジェクトへの参照を保持する必要があります/ addProduct
とメソッドの存在を保持するために、一度しか使用しないでください。
ただし、これらのaddProduct
およびメソッドは、その特定のjQueryオブジェクトに固有のものです。メソッドは作成する他のjQueryオブジェクトには存在しません。これに
var productList = $.extend($('ul.products'), {
addProduct: function(productData) {
// add a new li item
},
deleteProduct: function(productId) {
// delete li with id
}
});
// Using this particular jQuery object (productList) will work fine.
productList.addProduct();
productList.removeProduct();
// However, addProduct() does not exist on new jQuery objects, even if they use
// the same selector.
$('ul.products').addProduct(); // error; [object Object] has no method 'addProduct'
最善の方法を行うには、バック・ツー・基本-行くとjQueryオブジェクトを受け入れ、別addProduct
と関数を定義することです。これらの機能をul.products
セレクタでのみ機能するように制限したい場合は、これを行うことができます。それは一貫jQuery.fn
APIを保つよう
function addProduct(obj) {
obj = obj.filter('ul.products');
// do something with `obj` (its a jQuery object)
}
このアプローチが推奨されます。そうでない場合は、addProduct
とremoveProduct
~を追加します。jQuery.fn
インスタンスをインスタンスに追加したり、他のインスタンスでは冗長性を持たせたりします。しかし、このアプローチでは、addProduct
とremoveProduct
は常に存在しますが、使用したくない場合はanyoneになりません。
歴史ノート
この回答は元々のjQuery 1.7がリリースされた2011年11月に書かれました。それ以来、APIはかなり変更されています。上記の答えは 2.0.0バージョンのjQueryに関連しています。前1.9へ
、少し使用される方法は、あなたがしようとしている(しかし、あなたはあなたのアプローチを変更しない限り、あなたを助けにはなりません)何に関連である、存在するのに使用jQuery.sub
と呼ばれます。これにより、新しいjQueryコンストラクタが作成されます。
var newjQuery = jQuery.sub();
newjQuery.fn.addProduct = function() {
// blah blah
};
newjQuery.fn.deleteProduct = function() {
// blah blah
};
var foo = newjQuery('ul.products');
foo.deleteProduct();
foo.addProduct();
var bar = jQuery('ul.products');
bar.deleteProduct(); // error
bar.addProduct(); // error
はしかし注意してください、$
メソッドの別名ではなくnewjQuery
インスタンスよりも、古いjQuery
オブジェクトを参照します。
jQuery.sub
が1.9でjQueryから削除されました。今すぐ利用可能ですas a plugin。
この方法論の最終目標は何ですか? –
私は、 '$( 'ul.products')。fadeIn()。addProduct(data);'のようにメソッドをチェーン化したいと考えています。また、他のjQueryメソッドがどのように呼び出されているかを一貫して保ちます。 –