【问题标题】:How to retrieve id of element that a function is called on *without* using 'this' variable如何使用'this'变量检索在*没有*的情况下调用函数的元素的id
【发布时间】:2016-02-04 05:49:13
【问题描述】:

我试图满足 JSLint 不使用 this 的愿望,除非在特殊情况下。我有一个原始功能,像这样:

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

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

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

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

这似乎更像是一项学术练习,但我正在摸索如何在不使用 this 的情况下检索函数中的 id。有任何想法吗?

* 问题中的函数 *

这是一个切换功能,用于在单击文本链接时切换它们。这是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");

【问题讨论】:

  • JSLint 很可能只是错误的——不要仅仅因为它是错误的而将你的代码堵住。如果您向我们展示您的函数中使用 this 的实际代码,我们可以提供更好的帮助。
  • 如果你的函数是事件处理器,第一个参数就是事件,可以用event.target代替this
  • 根据您需要从this 获得的信息,您可以将该信息作为参数加载到您的my_original_function 吗?
  • @NickZuber 这是我能找到的唯一解决方案,但我不喜欢它,因为您必须手动将 id 的名称编码到函数调用中。如果可以动态检索元素 id,那将更有效率。 (当然,'this' 似乎非常有效,但我很想知道我是否能做到这一点。)
  • 我认为一般来说没有任何方法可以做到这一点。这就是 jQuery 方法的工作方式,它们被调用的元素作为隐式 this 参数传递。

标签: javascript jquery this jslint


【解决方案1】:
$.fn.extend({
    toggleText: function(open, close, that) {...

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

【讨论】:

  • 这是我能想到的唯一解决方案,但它的缺点是要求编码器显式输入 id 选择器,而不是让函数动态检索 id。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
  • 2023-03-20
  • 2023-02-09
  • 1970-01-01
  • 2013-08-17
  • 1970-01-01
  • 2018-09-04
相关资源
最近更新 更多