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++;
function (index,element): It is a mandatory parameter. It is a callback function that executes for every selected element. It has two parameter values that are defined as follows. index: It is an integer value that specifies the index position of the selector.
Description: Iterate over a jQuery object, executing a function for each matched element. Type: Function( Integer index, Element element ) A function to execute for each matched element. The .each() method is designed to make DOM looping constructs concise and less error-prone.
.each ( function (index, Element) ) function (index, Element)A function to execute for each matched element. ...where index will be the index and element will be the option element in list surprise to see that no have given this syntax. jQuery.each ( jQuery ('#list option'), function (indexInArray, valueOfElement) { //your code here });
The index of the current element within the collection is passed as an argument to the callback. The value (the DOM element in this case) is also passed, but the callback is fired within the context of the current matched element so the this keyword points to the current element as expected in other jQuery callbacks.
$('#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) });
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With