jQuery .each() index?
161,168
Solution 1
$('#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>
Solution 2
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)
});
Solution 3
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
Solution 4
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
});
Solution 5
$('#list option').each(function(intIndex){
//do stuff
});
Related videos on Youtube
Author by
Hailwood
I could tell you all about me... but I'd prefer to let my work do the talking for me!
Updated on September 09, 2020Comments
-
Hailwood almost 4 years
I am using
$('#list option').each(function(){ //do stuff });
to loop over the options in a list. I am wondering how I could get the index of the current loop?
as I dont want to have to have var i = 0; and inside the loop have i++;
-
Barney over 10 yearsAnd not, for example,
function( value | element, index | key )
, like the equivalent native methodforEach
and every other popular API. -
MarkokraM over 8 yearsOften it is better to debug with console.log than alert. Big option list would ruin your window stack with alert.
-
Mr world wide about 6 years
function(index | key , value | element )
is it valid..?