我想添加一个方法到一组元素的使用延长从选择返回:的jQuery在选择上的所有元素扩展方法
$(document).ready(function() {
$.extend($('.panel[data-refresh-url!=""][data-refresh-url]'), {
refresh: function (successFunc) {
// --- --- --- --- --- --- --- --- --- --- --- --- --- ---
var refreshElement = $(this).data('refresh-element');
if (refreshElement == undefined) { refreshElement = $(this).find('.panel-body'); }
refreshElement.empty().append('<div class="spinner"><i class="fa fa-2x fa-spin fa-spinner"></i></div>');
$.ajax({
url: $(this).data('refresh-url'),
type: 'post',
data: null,
success: function (data) {
if (successFunc == undefined) {
refreshElement.empty().append(data);
} else {
refreshElement.empty().append(successFunc(data));
}
},
error: function (xhr, status, error) {
refreshElement.empty().append('<i class="fa fa-exclamation-triangle"></i> Could not reload panel..');
}
});
// --- --- --- --- --- --- --- --- --- --- --- --- --- ---
}
});
});
(更新:我加满的方法,只是如果是以某种方式导致问题)。
我试过$.extend
和$.fn.extend
,但每当我尝试拨打$('#element').refresh()
,我得到refresh is not a function
。
我已经改变了方法,改为使用bind('refresh')
而不是所有的工作,但我需要传递一个函数,在成功刷新时执行,我的印象我不能那样做。
我真的不太熟悉jQuery - 我错过了什么?
嗯,这就是说没有这样做的例子在线..最后一部分实际上听起来像我想要做的事情 - 我有很多面板,我想添加此功能。编辑:噢,我试图将它添加到项目集合的问题也是如此,但是如果我逐项执行它,那么还可以吗? – Octopoid
不,如果你使用扩展的单个对象,问题是相同的。仔细看,我正在使用'$ buttons [i]'。当我像数组一样索引由'$'返回的对象时,它将返回该页面中的实际元素。这就是你想要扩展的对象,就像我的例子。 –
考虑一下:如果你使用'$(#foo)'并且使用它,那就是jQuery对象。如果使用'$(#foo)[0]',那就是实际的HTML元素。 –