How TO - Sort a List
Learn how to sort an HTML list, using JavaScript.
Click the button to sort the list alphabetically:
- Oslo
 - Stockholm
 - Helsinki
 - Berlin
 - Rome
 - Madrid
 
Creating a Sort Function
Example
  <ul id="id01">
  <li>Oslo</li>
  <li>Stockholm</li>
  
  <li>Helsinki</li>
  <li>Berlin</li>
  <li>Rome</li>
  
  <li>Madrid</li>
</ul>
<script>
function sortList() {
  
  var list, i, switching, b, shouldSwitch;
  list = 
  document.getElementById("id01");
  switching = true;
  /* Make 
  a loop that will continue until
  no switching has been done: */
  
  while (switching) {
    // Start by saying: no switching is 
  done:
    switching = false;
    b = 
  list.getElementsByTagName("LI");
    // Loop through all 
  list items:
    for (i = 0; i < (b.length - 1); i++) {
      
  // Start by saying there should be no switching:
      
  shouldSwitch = false;
      /* Check if the next 
  item should
      switch place with the current 
  item: */
      if (b[i].innerHTML.toLowerCase() > 
  b[i + 1].innerHTML.toLowerCase()) {
        
  /* If next item is alphabetically lower than current item,
        
  mark as a switch and break the loop: */
        
  shouldSwitch = true;
        break;
      
  }
    }
    if (shouldSwitch) {
      
  /* If a switch has been marked, make the switch
      
  and mark the switch as done: */
      
  b[i].parentNode.insertBefore(b[i + 1], b[i]);
      
  switching = true;
    }
  }
}
</script>
  Try it Yourself »
Sorting Ascending and Descending
The first time you click the button, the sorting direction is ascending (A to Z).
Click again, and the sorting direction will be descending (Z to A):
- Oslo
 - Stockholm
 - Helsinki
 - Berlin
 - Rome
 - Madrid
 
Example
  <ul id="id01">
  <li>Oslo</li>
  <li>Stockholm</li>
  
  <li>Helsinki</li>
  <li>Berlin</li>
  <li>Rome</li>
  
  <li>Madrid</li>
</ul>
<script>
function sortListDir() {
  
  var list, i, switching, b, shouldSwitch, dir, switchcount = 0;
  list 
  = document.getElementById("id01");
  switching = true;
  // Set 
  the sorting direction to ascending:
  dir = "asc"; 
  // Make a 
  loop that will continue until no switching has been done:
  while 
  (switching) {
    // Start by saying: no switching is done:
    
  switching = false;
    b = list.getElementsByTagName("LI");
    
  // Loop through all list-items:
    for (i = 0; i < (b.length 
  - 1); i++) {
      // Start by saying there should 
  be no switching:
      shouldSwitch = false;
      
  /* Check if the next item should switch place with the current item,
      
  based on the sorting direction (asc or desc): */
      
  if (dir == "asc") {
        if (b[i].innerHTML.toLowerCase() 
  > b[i + 1].innerHTML.toLowerCase()) {
          
  /* If next item is alphabetically lower than current item,
          
  mark as a switch and break the loop: */
          
  shouldSwitch = true;
          
  break;
        }
      
  } else if (dir == "desc") {
        if 
  (b[i].innerHTML.toLowerCase() < b[i + 1].innerHTML.toLowerCase()) {
          
  /* If next item is alphabetically higher than current item,
          
  mark as a switch and break the loop: */
          
  shouldSwitch= true;
          
  break;
        }
      
  }
    }
    if (shouldSwitch) {
      
  /* If a switch has been marked, make the switch
      
  and mark that a switch has been done: */
      
  b[i].parentNode.insertBefore(b[i + 1], b[i]);
      
  switching = true;
      // Each time a switch is 
  done, increase switchcount by 1:
      switchcount 
  ++;
    } else {
      /* If no 
  switching has been done AND the direction is "asc",
      
  set the direction to "desc" and run the while loop again. */
      
  if (switchcount == 0 && dir == "asc") {
        
  dir = "desc";
        switching = true;
      
  }
    }
  }
}
</script>
  Try it Yourself »
Sort List Numerically
Example
  if (Number(b[i].innerHTML) > Number(b[i + 1].innerHTML)) {
  
  shouldSwitch =  true;
  break;
}
  Try it Yourself »

