是否可以访问DOM元素'this'在jQuery插件的非函数参数参数中
Is it possible to access the DOM element 'this' in a non-function parameter argument in a jQuery plugin?
我有一个关于this
和jQuery插件的潜在奇怪的问题
根据我的理解,下面是一个非常基本的jQuery插件:
$.fn.clickclone = function(param){
return this.click(function(){
param.apply(this);
});
};
(假装这是扩展click()
的插件)
所以,如果我传递一个函数作为参数,它做它需要做的事情,并正确地访问this
作为一个DOM节点。容易。
我很清楚。
不清楚的是,是否有任何方法可以将非功能参数传递给插件,并使其从参数中正确访问this
?也就是说,我可以配置插件做这样的事情:
$("#foo").pluginname(["foo", $(this).text() ]);
for:
<a href="/bar" id="foo">Bar</a>
它将正确地传递一个数组给插件,数组中的第二项返回值Bar
?
我这样做,基本上,为我的插件提供语法糖,在那里你可以传递一个数组作为一个快捷方式(除了使用一个普通的回调函数作为主要功能)。除此之外,这样做,我失去了this
的使用权限。这就是我的困境。
EDIT:这是邪恶的,但是,似乎一个工作是将参数作为字符串传递,然后eval
它。对我来说不是一个可行的解决方案,但是,它说明了我希望能够做什么:
$.fn.clickclone = function(param){
return this.click(function(){
if(typeof param === "function"){
param.apply(this);
}
else if(typeof param[1] === "string"){
console.dir("This is evil: " + eval(param[1]));
}
});
};
在没有函数的情况下没有一般的方法可以做到这一点,因为,在纯粹的数学意义上,您要求输入的函数(即this
的函数):以某种方式依赖于this
的东西。
你也许可以用字符串来破解它,像这样,但你失去了函数的灵活性:
$.fn.alertMe = function (methodToAlert) {
alert(this[methodToAlert]());
};
// usage:
$("#foo").alertMe("text");
$("#foo").alertMe("width");
如果您发现使用函数是可以接受的,但是this
语法令人困惑,您可以简单地执行以下操作:
$.fn.alertMe = function (alertGetter) {
alert(alertGetter($(this));
};
// usage:
$("#foo").alertMe(function (x$) { return x$.text(); });
$("#foo").alertMe(function (x$) { return x$.width(); });
为了完整起见,我想我应该提到您可能会使用基于eval
的解决方案,看起来像$("#foo").alertMe("$(this).text()")
,但eval
是邪恶的,我既不会写也不会宽恕这样的解决方案。编辑:哦,我看到你在你的原始帖子的编辑中这样做了。干得好,腐蚀子孙后代;)
相关文章:
- 我的jQuery插件参数没有正确启动,遇到了问题
- 如何使用jQuery插件参数变量
- r.js评估'text'插件,尽管在'stubModules'参数
- 了解插件代码中$.each内部传递的参数的用法
- 如何在jRate插件上设置readOnly;单击一颗星后的参数
- 从插件向Datatables添加额外的服务器参数
- 允许向插件提供参数
- json格式作为cordova或phonegap ios插件的参数
- 它是如何在cordova插件对话框中使用参数按钮Index的
- jQuery插件回调函数参数
- Backbone.js的Backbone.Modelbinding插件中是否有绑定的转换器参数
- 调用插件外部的自定义函数并传递参数
- 动态更改 JQuery 插件中的高度参数
- 设置后如何在 jquery 插件上更新参数
- JQuery:将参数传递给插件以限制代码执行
- 尝试更改 JQuery 插件文件中的参数
- 使用位于插件文件夹内的参数执行二进制文件
- 可更改的属性作为 jQuery 插件中的参数
- 确定 JS 插件未收到必需参数时死亡的最佳实践
- 更改WordPress视频插件以自动设置youtube iframe参数