如何使用“this”变量检索调用函数的元素的 id,而不使用

How to retrieve id of element that a function is called on *without* using 'this' variable

提问人:Tom 提问时间:2/4/2016 最后编辑:Tom 更新时间:2/4/2016 访问量:131

问:

我试图取悦 JSLint 的愿望,除非在特殊情况下不使用。我有一个原始函数,如下所示:this

$.fn.extend({
    my_original_function: function ([arguments]){
        [arbitrary routine]
    }
});

...在 ID 选择器上像这样调用:

$('#my_id').my_original_function([arguments]);

在我的函数的原始版本中,我使用其中返回函数正在运行的选定 DOM 元素。但是,JSLint 不喜欢它,所以我试图找到一种方法来引用(在本例中),该函数正在被调用,在函数中......不使用 !this#my_idthis

这似乎更像是一项学术练习,但我正在为如何在不使用 .有什么想法吗?this

* 有问题的功能 *

这是一个切换功能,用于在单击文本链接时切换文本链接。这是原始版本:this

$.fn.extend({
    toggleText: function(open, close) {
        var isClicked = false;
        var that = $(this);
        $(this).click(function () {
            if (isClicked) {
                that.text(open);
                isClicked = false;
            } else {
                that.text(close);
                isClicked = true;
            }
        });
        return $(this);
    }
});

$('#id_one').toggleText("Toggle Text 1", "Toggle Text 2");
$('#id_two').toggleText("Hello", "Goodbye");
javascript jquery 这个 jslint

评论

6赞 jfriend00 2/4/2016
JSLint 可能只是错了 - 不要仅仅因为它错了而堵塞你的代码。如果您向我们展示您的函数中正在使用的实际代码,我们可以更好地提供帮助。this
0赞 Barmar 2/4/2016
如果函数是事件处理程序,则第一个参数是事件,可以代替 .event.targetthis
0赞 Nick Zuber 2/4/2016
根据您需要的信息,您可以将该信息作为参数加载到您的?thismy_original_function
0赞 Tom 2/4/2016
@NickZuber 这是我能找到的唯一解决方案,但我不喜欢它,因为您必须手动将 id 的名称编码到函数调用中。如果可以动态检索元素 ID,那将更有效率。(当然,“这个”似乎非常有效,但我很好奇我是否能做到这一点。
1赞 Barmar 2/4/2016
我不认为有什么方法可以做到这一点。这就是jQuery方法的工作方式,调用它们的元素作为隐式参数传递。this

答:

0赞 Nate 2/4/2016 #1
$.fn.extend({
    toggleText: function(open, close, that) {...

$('#id_one').toggleText("Toggle Text 1", "Toggle Text 2", $('#id_one'));

评论

0赞 Tom 2/4/2016
这是我能想到的唯一解决方案,但它的缺点是要求编码人员显式键入 id 选择器,而不是让函数动态检索 id。