What's new

Welcome to the forum 👋, Visitor

To access the forum content and all our services, you must register or log in to the forum. Becoming a member of the forum is completely free.

Sorting by a column

bumblebee123

New member
Joined
Sep 23, 2019
Messages
2
Reaction score
0
HTML Coins
0
I am trying to sort a user entered table in HTML. It sorts fine on default values.

However, it doesn't sort if I change values in the input table while testing. I tried different permutations of parseFloat and innerHTML but none of it worked. I am sure I am missing something basic but I have been at it for a few hours and I am getting really frustrated. Can someone point me in the right direction?
Thanks!!
This is my code


Code:
<!DOCTYPE html>
<html>
<head>
<title>Sort a HTML Table Alphabetically</title>
<style>
table {
  border-spacing: 0;
  width: 100%;
  border: 1px solid #ddd;
}

th, td {
  text-align: left;
  padding: 16px;
}

tr:nth-child(even) {
  background-color: #f2f2f2
}
</style>
</head>
<body>

<p>Click the button to sort the table alphabetically, by name:</p>
<p><button onclick="sortTable()">Sort</button></p>

<table id="myTable">
  <tr>
    <th>Name</th>
    <th>Country</th>
  </tr>
  <tr>
    <td>A</td>
    <td><input type="number" value=3></td>  </tr>
  <tr>
    <td>B</td>
    <td><input type="number" value=5></td>  </tr>
  <tr>
    <td>C</td>
    <td><input type="number" value=4></td>  </tr>
  <tr>
    <td>Test if code is reading</td>
    <td  colspan="2" bgcolor="#ADD8E6"><div id="Years"></td>

</table>

<script>
function sortTable() {
  var table, rows, switching, i, x, y, shouldSwitch;
  table = document.getElementById("myTable");
  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;
    rows = table.rows;
    /*Loop through all table rows (except the
    first, which contains table headers):*/
    for (i = 1; i < (rows.length - 2); i++) {
    /*for (i = 1; i < 2; i++) {*/
      //start by saying there should be no switching:
      shouldSwitch = false;
      /*Get the two elements you want to compare,
      one from current row and one from the next:*/
      x = ((rows[i].getElementsByTagName("TD")[1]).innerHTML);
      y = ((rows[i + 1].getElementsByTagName("TD")[1]).innerHTML);
      //check if the two rows should switch place:
      
      /*document.getElementById("x").innerHTML = x.toLocaleString('en');*/
      if (x < y) {
        //if so, 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:*/
      rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
      switching = true;
    }
  }
}
</script>

</body>
</html>
 

Theme customization system

You can customize some areas of the forum theme from this menu.

  • Wide/Narrow view

    You can control a structure that you can use to use your theme wide or narrow.

    Grid view forum list

    You can control the layout of the forum list in a grid or ordinary listing style structure.

    Picture grid mode

    You can control the structure where you can open/close images in the grid forum list.

    Close sidebar

    You can get rid of the crowded view in the forum by closing the sidebar.

    Fixed sidebar

    You can make it more useful and easier to access by pinning the sidebar.

    Close radius

    You can use the radius at the corners of the blocks according to your taste by closing/opening it.

  • Choose the color combination that reflects your taste
    Background images
    Color gradient backgrounds
Back