mud
mud

Reputation: 73

Sort html table numerically with Javascript - above 10 does not work

The JS function below sorts the td:s in myTable only based on the first digit in the td. How do I get it to sort based on all digits in the td (order low to high; for example 1,5,15 and not 1,15,5)?

function sortTable() {
  var table, rows, switching, i, x, y, shouldSwitch;
  table = document.getElementById("myTable");
  switching = true;
  while (switching) {
    switching = false;
    rows = table.rows;
    for (i = 1; i < (rows.length - 1); i++) {
      shouldSwitch = false;
      x = rows[i].getElementsByTagName("TD")[0];
      y = rows[i + 1].getElementsByTagName("TD")[0];
      if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
        shouldSwitch = true;
        break;
      }
    }
    if (shouldSwitch) {
      rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
      switching = true;
    }
  }
}

Upvotes: 1

Views: 174

Answers (1)

user10340130
user10340130

Reputation:

Use parseInt() to convert string to integers. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt

So, comparison should be done like -

if (parseInt(x.innerHTML.toLowerCase()) > parseInt(y.innerHTML.toLowerCase())) {

Upvotes: 1

Related Questions