gpt4 book ai didi

javascript - 使 JQuery 插件可扩展的方法是什么?

转载 作者:行者123 更新时间:2023-11-29 19:58:41 25 4
gpt4 key购买 nike

我尝试通过以下方式将一些常见的应用程序特定操作移动到 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', ...)

但我想方设法加入更多句法...

最佳答案

我提出的任务很难实现。

Official docs说:

在任何情况下,单个插件都不应在 jQuery.fn 对象中声明多个命名空间:

(function( $ ){
$.fn.tooltip = function( options ) {
// THIS
};
$.fn.tooltipShow = function( ) {
// IS
};
$.fn.tooltipHide = function( ) {
// BAD
};
})( jQuery );

这是一个令人气馁的行为,因为它使 $.fn 命名空间变得困惑。要解决此问题,您应该将插件的所有方法收集到一个对象字面量中,并通过将方法的字符串名称传递给插件来调用它们。

另一种方法是保持指向 this 的链接,如 http://code.google.com/p/jquery-plugin-dev/source/browse/trunk/jquery.plugin.js

所以你的电话看起来像:

$.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);
});

一些相关链接:

旧式插件扩展:

关于javascript - 使 JQuery 插件可扩展的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15389025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com