Each()索引?

我在吸毒

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

循环访问列表中的选项。 我想知道如何得到当前循环的索引?

因为我不想要 var i = 0; 循环内部有 i + + ;

170850 次浏览
$('#list option').each(function(index){
//do stuff
console.log(index);
});

logs the index :)

a more detailed example is below.

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>

jQuery takes care of this for you. The first argument to your .each() callback function is the index of the current iteration of the loop. The second being the current matched DOM element So:

$('#list option').each(function(index, element){
alert("Iteration: " + index)
});
$('#list option').each(function(intIndex){
//do stuff
});

From the jQuery.each() documentation:

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

So you'll want to use:

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

...where index will be the index and element will be the option element in list

surprise to see that no have given this syntax.

.each syntax with data or collection

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

OR

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