插件 - 入门
可以通过添加其原型来扩展 jQuery API。例如,现有的 API 已经有很多可用的功能,如 .hide()
,.fadeIn()
,.hasClass()
等。
jQuery 原型通过 $.fn
公开,源代码包含该行
jQuery.fn = jQuery.prototype
向这个原型添加函数将允许从任何构造的 jQuery 对象调用这些函数(这是每次调用 jQuery 时隐式完成的,或者如果你愿意,每次调用$)。
构造的 jQuery 对象将根据传递给它的选择器保存一个内部元素数组。例如,$('.active')
将构建一个 jQuery 对象,该对象在调用时保存具有活动类的元素(例如,这不是一组实时元素)。
插件函数内部的 this
值将引用构造的 jQuery 对象。结果,this
用于表示匹配的集合。
基本插件 :
$.fn.highlight = function() {
this.css({ background: "yellow" });
};
// Use example:
$("span").highlight();
可链接性和可重用性
与上面的示例不同,jQuery 插件应该是可链接的。
这意味着可以将多个方法链接到相同的元素集合,例如 $(".warn").append("WARNING! ").css({color:"red"})
(请参阅我们如何在 .append()
之后使用 .css()
方法,这两种方法都适用于相同的 .warn
集合)
允许一个人在不同的集合上使用相同的插件,通过不同的自定义选项在自定义/可重用性中起着重要作用 ****
(function($) {
$.fn.highlight = function( custom ) {
// Default settings
var settings = $.extend({
color : "", // Default to current text color
background : "yellow" // Default to yellow background
}, custom);
return this.css({ // `return this` maintains method chainability
color : settings.color,
backgroundColor : settings.background
});
};
}( jQuery ));
// Use Default settings
$("span").highlight(); // you can chain other methods
// Use Custom settings
$("span").highlight({
background: "#f00",
color: "white"
});
自由
以上示例在理解基本插件创建的范围内。请记住,不要将用户限制为一组有限的自定义选项。
比如说你想要构建一个 .highlight()
插件,你可以在其中传递一个所需的文本字符串,该字符串将被突出显示并允许最大的样式自由:
//...
// Default settings
var settings = $.extend({
text : "", // text to highlight
class : "highlight" // reference to CSS class
}, custom);
return this.each(function() {
// your word highlighting logic here
});
//...
用户现在可以传递所需的**文本,**并通过使用自定义 CSS 类完全控制添加的样式:
$("#content").highlight({
text : "hello",
class : "makeYellowBig"
});