插件扩展和 UI 类库


jQuery 的插件扩展

开发 jQuery 插件非常简单,jQuery 对象的原型对象是 jQuery.fn,所以扩展 jQuery 只需要给这个原型对象新增函数即可,该函数会成为一个 jQuery 方法:

jQuery.fn.println = function () {
    var msg = Array.prototype.join.call(arguments, " ");
    this.each(function () {
        jQuery(this).append(document.createTextNode(msg).append("<br/>"));
    });
    return this;
};

关于插件开发的一些约定:

  • 不要依赖 $ 标识符
  • 如果插件代码不返回自己的值,确保返回 jQuery 对象以便链式调用
  • 如果对象有两个以上参数或配置选项,请允许用户使用对象方式传递选项
  • 不要污染 jQuery 方法的命名空间
  • 如果插件需要绑定事件处理程序,请将这些事件处理程序放在事件命名空间里
  • 如果插件需要使用data()方法与元素关联数据,请将所有数据值放在单一对象中
  • 用「jquery.plugin.js」这种命名方式将插件代码保存到文件中

插件可以给 jQuery 自身增加函数来添加新的工具函数:

jQuery.debug = function () {
    var elt = jQuery("#debug");
    if (elt.length === 0) {
        elt = jQuery("<div id='debug'><h1>Debugging Output</h1></div>");
        jQuery(document.body).append(elt);
    }
    elt.println.apply(elt, arguments);
};

除此之外,还可以扩展 jQuery 类库的其他部分,比如通过给 jQuery.fx.speeds 添加属性来扩充新的动画时长名,也可以通过给 jQuery.easing 添加属性添加新的缓动函数,甚至可以扩展 jQuery 的 CSS 选择器引擎:

jQuery.expr[:].draggable = function(e) {
    return e.draggable === true;
};

或者看一个更完整的示例 —— :data(x)伪类:

jQuery.expr[:].data = function(element, index, match, array) {
    return element.hasAttribute("data-" + match[3]);
};

其中,第一个参数是候选 DOM 元素,第二个参数是整数序号,表示当前元素在候选元素数组中的位置,候选元素数组是第四个参数,第三个参数是调用 RegExp.exec() 方法后返回的数组,该数组第四个元素是伪类过滤器后面的圆括号中的值。

jQuery UI 类库

jQuery UI 是在 jQuery 基础之上构建的用户界面组件类库:http://jqueryui.com

jQuery UI 组件和交互功能采用 jQuery 插件的方法构建,每一个都定义了一个 jQuery 方法。要灵活自如地使用 jQuery UI 组件,需要熟悉三样东西:组件地配置项、方法和事件。


点赞 取消点赞 收藏 取消收藏

<< 上一篇: jQuery 选择器和选取方法

>> 下一篇: localStorage 和 sessionStorage