这是一个小 jQuery 插件的要点,它向一组 jQuery 元素添加了 loadThen 函数。它基本上是 load() 没有回调,它返回一个仅在内容加载并插入到选定元素集中后才解析的承诺。
它基本上是 jQuery 自己的 load() 代码的复制/粘贴,除了它从实际的 ajax 调用返回承诺。如果 ajax 失败,这可以让您获得拒绝的承诺。
由于它基于 load() 功能,因此您可以在 url 后添加一个选择器,以空格分隔,以仅获取加载的 html 的片段。
示例 1:将该站点的主页加载到 id="container" 的元素中
$('#container').loadThen('/').then(function () {
// loaded and ready.
}, function () {
// error
});
示例2:将首页的页眉加载到本页的页眉中
$('h1').eq(0).loadThen('/ h1').then(function () {
// loaded and ready.
}, function () {
// error
});
要点内容:
(function ($) {
var _loadThen = $.fn.loadThen;
$.fn.loadThen = function (url, params) {
if (typeof url !== "string" && _loadThen) {
return _loadThen.apply(this, arguments);
}
if(this.length <= 0) {
return jQuery.Deferred().resolveWith(this, ['']);
}
var selector, type, response,
self = this,
off = url.indexOf(" ");
if (off >= 0) {
selector = jQuery.trim(url.slice(off));
url = url.slice(0, off);
}
if (params && typeof params === "object") {
type = "POST";
}
return jQuery.ajax({
url: url,
type: type,
dataType: "html",
data: params
}).then(function (responseText) {
self.html(selector ? jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector) : responseText);
return self;
});
};
}(jQuery));