既然我们已经了解了如何使用 jQuery 插件,那么了解如何构建它们绝对是值得的。我们已经简要地提到了,如果你想扩展原生 jQuery 对象,你可以这样做。就像
$.myFunction = function() {
console.log("I am a function on the jQuery object.");
};
// call it
$.myFunction();
但这本身并没有什么用。为了创建一个新的 jQuery 方法,你可以在一组元素上调用它,你需要像这样去做
$.fn.myMethod = function() {
// I'm a new method
});
这与对 jQuery 使用 .prototype 完全相同,对于好奇的人来说,你可以在这里了解更多信息。用这种方式做意味着我们能够在一组元素上使用这个新方法。就像
$("li").myMethod();
你可以在这个方法中做任何你想做的事情,但是为了成为一个好的 jQuery 插件构建公民,你应该将相同的一组元素从插件中返回出来。
$.fn.myMethod = function() {
// Do some stuff
return this;
});
这样它就可以与链式调用一起工作。如果你没有这样做,并且有人尝试了像
$(“li”).myMethod().show();
这将失败,因为 .show()
将被实质上在 nothing 上调用。jQuery 插件通常被设计为遍历每个元素,这样你就可以直接访问集合中的每个元素来做你需要做的事情。
另一个良好的行为是将插件包装在一个立即执行函数表达式中,并将 jQuery 作为参数传递给它。这样你就可以在插件代码中更安全地使用 $。这是因为在某些情况下,jQuery 的 $ 简写不可用(例如,用户在“兼容模式”下使用了 jQuery)。
有了这两件事,插件结构就变成了
(function($) {
$.fn.myMethod = function() {
return this.each(function() {
// do things
});
};
})(jQuery)
在屏幕录制中,我们最终构建了一个简单的插件,用于在任何元素的末尾添加一个箭头。
查看 CodePen 上由 Chris Coyier (@chriscoyier) 创建的 rwasH
当然,随着你想要做更多事情的雄心壮志的增长,它也会变得更加复杂。