gpt4 book ai didi

javascript - 是否可以在 jQuery 插件的非函数参数参数中访问 DOM 元素 'this'?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:21:21 24 4
gpt4 key购买 nike

我有一个关于 this 和 jQuery 插件的奇怪问题

据我了解,以下是一个非常基本的 jQuery 插件:

$.fn.clickclone = function(param){
return this.click(function(){
param.apply(this);
});
};

(假装这是一个以某种方式扩展 click() 的插件。)

因此,如果我将一个函数作为参数传递,它会做它需要做的事情并正确地访问 this 作为 DOM 节点。很简单。

这对我来说很清楚。

不清楚的是,有什么方法可以将非函数 参数传递给插件并让它从参数中正确访问this?即,我可以配置插件来做这样的事情吗:

$("#foo").pluginname(["foo", $(this).text() ]);

例如:

<a href="/bar" id="foo">Bar</a>

它会正确地将数组传递给插件,数组中的第二项返回值 Bar?

基本上,我这样做是为了为我的插件提供语法糖,您可以在其中将数组作为快捷方式传递(除了使用普通回调函数作为主要功能之外)。除了这样做,我无法使用 this。因此我的困境。

编辑: 这是邪恶的,但是,似乎一种变通方法是将参数作为字符串传递,然后对其进行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 的东西。

你也许可以像这样用字符串破解它,但是你失去了函数的灵 active :

$.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 是邪恶的,我既不会写也不会宽恕这样的解决方案。编辑:哦,我看到您在对原始帖子的编辑中这样做了。干得好腐 eclipse 子孙后代;)

关于javascript - 是否可以在 jQuery 插件的非函数参数参数中访问 DOM 元素 'this'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7328781/

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