如果您只希望addProduct
和方法在該對象上使用該功能,那麼您得到的結果將會正常工作;但是您必須保留對該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'
的最佳方式做這將是去背到基礎知識和定義不同addProduct
和功能,它接受一個jQuery對象。如果你想限制這些功能,他們只能在ul.products
選擇器上工作,你可以這樣做;
function addProduct(obj) {
obj = obj.filter('ul.products');
// do something with `obj` (its a jQuery object)
}
會建議使用此方法,因爲它保持jQuery.fn
API相一致;否則你會添加addProduct
和removeProduct
到某些jQuery.fn
實例但不是其他,或在其他情況下使用它們的冗餘。然而,使用這種方法,addProduct
和removeProduct
總是存在,但如果他們不想使用它們,不要以任何方式獲取。
歷史記載
這個答案原文爲2011年11月,當時的jQuery 1.7發佈了。從那以後,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
不過要小心,在$
方法別名將引用舊jQuery
對象,而不是newjQuery
實例。
jQuery.sub
已從1.9中的jQuery中刪除。它現在可用as a plugin。
我可以問一下這種方法的最終目的是什麼? –
我希望能夠鏈接它,例如'$('ul.products')。fadeIn()。addProduct(data);'。此外,它保持與其他jQuery方法的調用一致。 –