Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jQuery .each() index?

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++;

like image 745
Hailwood Avatar asked Dec 03 '10 02:12

Hailwood


People also ask

What is the use of index function in jQuery?

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.

What is the use of each in jQuery?

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.

How to execute each matched element in a list using jQuery?

.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 });

How do you pass an index to a jQuery callback?

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.


2 Answers

$('#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>
like image 175
Damien-Wright Avatar answered Sep 24 '22 06:09

Damien-Wright


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) }); 
like image 24
Alex Avatar answered Sep 25 '22 06:09

Alex