我尝试通过以下方式将一些常见的应用程序特定操作移动到 jQuery插件:
$.fn.extpoint = function() {...}
但我不想声明几个扩展点:
$.fn.extpoint1 = function() {...}
$.fn.extpoint2 = function() {...}
...
相反,我想使用语法糖,如:
$("#id").extpoint.func1().extpoint.func2()
定义:
$.fn.extpoint = {}
$.fn.extpoint.func1 = function() {
this.val();
this.data("ip");
...
return this;
}
并致电:
$("#id").extpoint.func1(...)
当this
进行评估时, $.fn.extpoint
指向func1
(包含func2
,func1
,...元素的字典),而不是原始jQuery对象。< / p>
是否可以使jQuery插件可扩展?
PS 即可。可以将函数名称作为第一个参数传递给$.fn.extpoint
,并实现$.fn.extpoint('extend', func)
调用以扩展(保存到名称和实现之间的内部字典关联)扩展点。在这种情况下,用例看起来像:
$("#id").extpoint('func1', ...).extpoint('func2', ...)
但我想找到更多语法糖 ...
的方法答案 0 :(得分:2)
我要求的任务很难实现。
在任何情况下,单个插件都不应在jQuery.fn
对象中声明多个命名空间:
(function( $ ){
$.fn.tooltip = function( options ) {
// THIS
};
$.fn.tooltipShow = function( ) {
// IS
};
$.fn.tooltipHide = function( ) {
// BAD
};
})( jQuery );
这是不鼓励的,因为它使$.fn
命名空间变得混乱。要解决这个问题,你应该在对象文字中收集所有插件的方法,并通过将方法的字符串名称传递给插件来调用它们。
另一种方法是保持与http://code.google.com/p/jquery-plugin-dev/source/browse/trunk/jquery.plugin.js
中this
的链接
所以你的电话看起来像是:
$.fn.addPlugin('test2', {
__construct : function(alertText) { alert(alertText); },
alertAttr : function(attr) { alert($(this).attr(attr)); return this; },
alertText : function() { alert($(this).text()); return this; }
});
$('#test2').bind('click', function() {
var btn = $(this);
btn.test2('constructing...').alertAttr('id').alertText().jQuery.text('clicked!');
setTimeout(function() {
btn.text('test2');
}, 1000);
});
一些相关链接:
旧式插件扩展:
答案 1 :(得分:1)
Here概述了创建插件。我相信你所问的是被称为“链接”。这使得jQuery如此易于使用,并且您希望确保正确实现它是很好的。
在开发关于链接的插件时要记住的关键是始终return this;
来自您的方法。这就是让你保持链条发展的原因。