【发布时间】:2013-03-01 14:33:55
【问题描述】:
我尝试通过以下方式将一些常见的应用程序特定操作移动到 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、... 元素的字典)而不是原始 jQuery 对象,当 func1 评估时。
jQuery插件可以扩展吗?
附言。可以将函数名称作为第一个参数传递给$.fn.extpoint 并实现$.fn.extpoint('extend', func) 调用以扩展(保存到名称和实现之间的内部字典关联)扩展点。在这种情况下,用例如下所示:
$("#id").extpoint('func1', ...).extpoint('func2', ...)
但我正在寻找更多语法的方法 sugar...
【问题讨论】:
-
这样不行:
$("#id").extpoint.func1().extpoint.func2()因为 func1 和 func2 无法访问$("#id") -
@KevinB 是的,我明白了,但是想办法用一些未知的技巧来避免这种情况...... +1
-
一两年前在 jQuery 论坛上有一个帖子,有人想出了一种方法来实现这一点,但它非常复杂,我不记得它是如何完成的。我建议在那里搜索它,我找不到它。
标签: javascript jquery jquery-plugins plugins syntactic-sugar