如何在jQuery中传递多个参数()?

时间:2013-11-18 18:46:11

标签: javascript jquery arguments each

如何将多于索引和元素传递给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)的元素。

2 个答案:

答案 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);
      });
   }
}

FIDDLE

答案 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

      });