1

有人可以解释一下,为什么我们需要每个(功能(i)(i)什么?似乎i可以是任何字母。为什么(i)是必要的?我不太明白。非常感谢

<body>
    <div>Click here</div>
  <div>to iterate through</div>
  <div>these divs.</div>
<script>
    $(document.body).click(function () {
      $( "div" ).each(function (i) {
        if ( this.style.color != "blue" ) {
          this.style.color = "blue";
        } else {
          this.style.color = "";
        }
      });
    });
</script>
4

6 回答 6

3

回调函数的第一个参数是循环中迭代的索引。即循环计数器。在您的情况下,您根本不需要它,因为您没有使用它:

$("div").each(function() {
  if (this.style.color != "blue") {
    this.style.color = "blue";
  } else {
    this.style.color = "";
  }
});

第二个参数是当前迭代的元素,即与this所指的相同。您可以使用该参数而不是this. 当然,要使用第二个参数,您还必须指定第一个参数,即使您不使用它:

$("div").each(function(i, e) {
  if (e.style.color != "blue") {
    e.style.color = "blue";
  } else {
    e.style.color = "";
  }
});
于 2013-01-08T00:37:11.863 回答
1

这可以是您想要的任何名称,它是项目的索引,以防它在函数中有用。jQuery 文档中对此进行了解释。http://api.jquery.com/each/

于 2013-01-08T00:31:03.877 回答
1

你可以在回调函数中调用 i 任何你想要的,每个方法都会为每个与你的每个选择器匹配的对象调用该回调(在你的情况下是所有 div),并将它传递给你的回调参数(i)或你调用的任何东西您可以为每次迭代操作这些对象中的每一个。

希望我说清楚了,

干杯

于 2013-01-08T00:32:01.303 回答
1

好吧,我不知道这是否是您要问的,但根据文档

.each( function(index, Element) )

那是签名,因此i在您的情况下,将是当前项目索引的参数。因此,如果您的 div 中有 10 个东西,则每次调用该函数时,它都会为您的 div 中的第 i 个元素传递索引 i。

于 2013-01-08T00:32:09.347 回答
1

.each用于迭代它所应用的元素集合。第一个参数(i在您的示例中为 )提供集合中当前元素的索引值。

完整的签名是:

.each( function(index, Element) ) 

当您使用以下重载时:

.each( function(index) ) 

index在函数规范( 、、、、i等)中如何命名参数并不重要blahparam1索引值将被传递到该参数中。

在您的示例中,此参数值没有提供额外的好处,因为您的用例不需要它,但是,有很多用例是基本参数。

于 2013-01-08T00:32:32.363 回答
1

i,j,k 是整数的标准表示法。它自然地用于遍历每个元素索引都是整数的可枚举列表(如数组或节点列表)。对于叠瓦环,第一级将使用 i,第二级使用 j,以此类推。

这只是一个约定,实际上您可以使用其他名称,例如 jQuery 文档中显示的“索引”,使您的代码更具可读性。缺点是它会使您的脚本更长,但是随着今天缩小/压缩的广泛使用,这应该不是问题。

当然,如果您不引用循环中的索引,则可以省略它。

于 2013-01-08T00:48:52.760 回答