【发布时间】: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