jQuery .each() 索引?

Posted

技术标签:

【中文标题】jQuery .each() 索引?【英文标题】:jQuery .each() index? 【发布时间】:2011-05-19 12:34:51 【问题描述】:

我正在使用

$('#list option').each(function()
//do stuff
);

循环遍历列表中的选项。 我想知道如何获取当前循环的索引?

因为我不想让 var i = 0; 并且在循环内部有 i++;

【问题讨论】:

【参考方案1】:
$('#list option').each(function(index)
  //do stuff
  console.log(index);
);

记录索引:)

下面是一个更详细的示例。

function run_each() 

  var $results = $(".results");

  $results.empty();

  $results.append("==================== START 1st each ====================");
  console.log("==================== START 1st each ====================");

  $('#my_select option').each(function(index, value) 
    $results.append("<br>");
    // log the index
    $results.append("index: " + index);
    $results.append("<br>");
    console.log("index: " + index);
    // logs the element
    // $results.append(value);  this would actually remove the element
    $results.append("<br>");
    console.log(value);
    // logs element property
    $results.append(value.innerhtml);
    $results.append("<br>");
    console.log(value.innerHTML);
    // logs element property
    $results.append(this.text);
    $results.append("<br>");
    console.log(this.text);
    // jquery
    $results.append($(this).text());
    $results.append("<br>");
    console.log($(this).text());

    // BEGIN just to see what would happen if nesting an .each within an .each
    $('p').each(function(index) 
      $results.append("==================== nested each");
      $results.append("<br>");
      $results.append("nested each index: " + index);
      $results.append("<br>");
      console.log(index);
    );
    // END just to see what would happen if nesting an .each within an .each

  );

  $results.append("<br>");
  $results.append("==================== START 2nd each ====================");
  console.log("");
  console.log("==================== START 2nd each ====================");


  $('ul li').each(function(index, value) 
    $results.append("<br>");
    // log the index
    $results.append("index: " + index);
    $results.append("<br>");
    console.log(index);
    // logs the element
    // $results.append(value); this would actually remove the element
    $results.append("<br>");
    console.log(value);
    // logs element property
    $results.append(value.innerHTML);
    $results.append("<br>");
    console.log(value.innerHTML);
    // logs element property
    $results.append(this.innerHTML);
    $results.append("<br>");
    console.log(this.innerHTML);
    // jquery
    $results.append($(this).text());
    $results.append("<br>");
    console.log($(this).text());
  );





$(document).on("click", ".clicker", function() 

  run_each();

);
.results 
  background: #000;
  height: 150px;
  overflow: auto;
  color: lime;
  font-family: arial;
  padding: 20px;


.container 
  display: flex;


.one,
.two,
.three 
  width: 33.3%;


.one 
  background: yellow;
  text-align: center;


.two 
  background: pink;


.three 
  background: darkgray;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="container">

  <div class="one">
    <select id="my_select">
      <option>apple</option>
      <option>orange</option>
      <option>pear</option>
    </select>
  </div>

  <div class="two">
    <ul id="my_list">
      <li>canada</li>
      <li>america</li>
      <li>france</li>
    </ul>
  </div>

  <div class="three">
    <p>do</p>
    <p>re</p>
    <p>me</p>
  </div>

</div>

<button class="clicker">run_each()</button>


<div class="results">


</div>

【讨论】:

not,例如 function( value | element, index | key ),就像等效的原生方法 forEach 和所有其他流行的 API。 通常使用 console.log 调试比使用警报更好。大的选项列表会用警报破坏你的窗口堆栈。 function(index | key , value | element ) 是否有效..?【参考方案2】:

jQuery 会为您解决这个问题。 .each() 回调函数的第一个参数是循环当前迭代的索引。第二个是当前匹配的 DOM 元素所以:

$('#list option').each(function(index, element)
  alert("Iteration: " + index)
);

【讨论】:

【参考方案3】:

来自jQuery.each() documentation:

.each( function(index, Element) )
    function(index, Element)A function to execute for each matched element.

所以你会想要使用:

$('#list option').each(function(i,e)
    //do stuff
);

...其中 index 将是索引,element 将是列表中的选项元素

【讨论】:

【参考方案4】:

惊讶地发现没有人给出这种语法。

.each 带有数据或集合的语法

jQuery.each(collection, callback(indexInArray, valueOfElement));

jQuery.each( jQuery('#list option'), function(indexInArray, valueOfElement)
//your code here
); 

【讨论】:

【参考方案5】:
$('#list option').each(function(intIndex)
//do stuff
);

【讨论】:

以上是关于jQuery .each() 索引?的主要内容,如果未能解决你的问题,请参考以下文章

在.each循环jquery中增加索引值几次

jQuery each-loop 访问每个索引文本元素

当 $.each 和 array.splice(i) 保持在一起时,JQuery 处理数组超出索引错误

jQuery核心语法

jquery中$.each的用法

jquery中each的3种遍历方法