如何将多于索引和元素传递给jQuery的each()函数? 我试图存档这样的东西:
function HelloWorld() {
this.foo = function(obj) {
console.log(obj);
}
this.test = function(className) {
var that = this; // I need HelloWorld inside
$("."+className).each(function(hw) {
hw.foo(this);
}(that));
}
}
然后在页面的某个地方,假设我有十几个具有特定类名的元素。
例如:
<div class="helloworld" data-test="1"/>
<div class="helloworld" data-test="2"/>
<div class="helloworld" data-test="3"/>
<div class="helloworld" data-test="4"/>
在js电话中,我会这样做:
new HelloWorld().test("helloworld");
然而,当我在每个函数中, this
,成为整个页面的全局,我需要它成为jQuery元素的this
来自$("."+className)
。
如果我没有在匿名函数的末尾传递that
,则this
将是来自$("."+className)
的元素。
答案 0 :(得分:5)
that
的范围更广,因此它已在每个循环中可用:
function HelloWorld() {
this.foo = function(obj) {
console.log(obj);
}
this.test = function(className) {
var that = this;
$("."+className).each(function(index, elem) {
that.foo(elem);
});
}
}
答案 1 :(得分:2)
您在此处有错误:
var that = this;
$("."+className).each(function(hw) {
hw.foo(this);
}(that));
这部分不好:
}(that));
来自更高闭包的所有变量都已可用,您无需以任何方式传递它。
应该是这样的:
var that = this;
$("."+className).each(function(index, elm) {
// `this` here is element of className
// `elm` here is the same as this
// `that` here is what `this` was in higher closure
// `index` here is the number of the element in a sequence
});