Thursday, November 20, 2025
HomeLanguagesJavascriptHow to sort rows in a table using JavaScript ?

How to sort rows in a table using JavaScript ?

Since JavaScript doesn’t provide any inbuilt functions to sort a table we will be required to use native methods to sort a given table. We will look into the methods in this article. 

Approach: A basic algorithm and a similar approach will be used for both of the following examples. Loop the program to switch and sort the elements until it is sorted.

// Executes on action like button click
Function() {   

       // Main loop that runs until the table is sorted
       While (condition = true) {   
      
          // Runs for all rows
          for (i = 1; i < row.length; i++ ) {   
         
             //Check if the switch is required
             if (element_A > element_B){   
             
                // Perform switch
                PerformSwitch();   
             }
          }
       }
}

Example 1: This example sorts the table using a while loop to switch the rows until the rows are sorted. 

HTML




<!DOCTYPE html>
<html lang="en">
 
<head>
    <title>
      How to sort rows in a table using JavaScript?
      </title>
   
    <style>
        body {
            text-align: center;
        }
 
        table, th, tr td {
            border: 1px solid black;
        }
        th, td {
            padding: 3px 20px;
        }
        table {
            margin: auto;
        }
    </style>
</head>
 
<body>
    <h1 style="color:green;">
        neveropen
    </h1>
     
    <table id="table">
        <tr>
            <th>Country</th>
            <th>Capital</th>
        </tr>
        <tr>
            <td>United states of America</td>
            <td>Washington DC</td>
        </tr>
        <tr>
            <td>India</td>
            <td>New Delhi</td>
        </tr>
        <tr>
            <td>Australia</td>
            <td>Canberra</td>
        </tr>
        <tr>
            <td>Germany</td>
            <td>Berlin</td>
        </tr>
    </table>
    <br>
 
    <button onclick="sortTable()">
        Sort
    </button>
 
    <script>
 
        // JavaScript Program to illustrate
        // Table sort on a button click
        function sortTable() {
            let table, i, x, y;
            table = document.getElementById("table");
            let switching = true;
 
            // Run loop until no switching is needed
            while (switching) {
                switching = false;
                let rows = table.rows;
 
                // Loop to go through all rows
                for (i = 1; i < (rows.length - 1); i++) {
                    var Switch = false;
 
                    // Fetch 2 elements that need to be compared
                    x = rows[i].getElementsByTagName("TD")[0];
                    y = rows[i + 1].getElementsByTagName("TD")[0];
 
                    // Check if 2 rows need to be switched
                    if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
 
                        // If yes, mark Switch as needed and break loop
                        Switch = true;
                        break;
                    }
                }
                if (Switch) {
                    // Function to switch rows and mark switch as completed
                    rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
                    switching = true;
                }
            }
        }
    </script>
</body>
 
</html>


Output:

 

Example 2: This example sorts the table using the same loop technique but executes the function for both the given columns, as well as in both directions (ascending and descending). 

HTML




<!DOCTYPE html>
<html lang="en">
 
<head>
    <title>
        How to sort rows in a table using JavaScript?
    </title>
    <style>
        body {
            text-align: center;
        }
 
        table,
        th,
        tr td {
            border: 1px solid black;
        }
 
        th,
        td {
            padding: 3px 20px;
        }
 
        table {
            margin: auto;
        }
    </style>
</head>
 
<body>
    <h1 style="color:green">
        neveropen
    </h1>
 
    <h3>
        Click on header to sort in
        ascending and descending
    </h3>
 
    <table id="table">
        <tr>
            <!--Calls sortTable function(0 for
                country and 1 for capital) when
                headers are clicked-->
            <th onclick="sortTable(0)">Country</th>
            <th onclick="sortTable(1)">Capital</th>
        </tr>
        <tr>
            <td>United states of America</td>
            <td>Washington DC</td>
        </tr>
        <tr>
            <td>India</td>
            <td>New Delhi</td>
        </tr>
        <tr>
            <td>Australia</td>
            <td>Canberra</td>
        </tr>
        <tr>
            <td>Germany</td>
            <td>Berlin</td>
        </tr>
    </table>
 
    <script>
 
        // JavaScript program to illustrate
        // Table sort for both columns and
        // both directions
        function sortTable(n) {
            let table;
            table = document.getElementById("table");
            var rows, i, x, y, count = 0;
            var switching = true;
 
            // Order is set as ascending
            var direction = "ascending";
 
            // Run loop until no switching is needed
            while (switching) {
                switching = false;
                var rows = table.rows;
 
                //Loop to go through all rows
                for (i = 1; i < (rows.length - 1); i++) {
                    var Switch = false;
 
                    // Fetch 2 elements that need to be compared
                    x = rows[i].getElementsByTagName("TD")[n];
                    y = rows[i + 1].getElementsByTagName("TD")[n];
 
                    // Check the direction of order
                    if (direction == "ascending") {
 
                        // Check if 2 rows need to be switched
                        if (x.innerHTML.toLowerCase() >
                        y.innerHTML.toLowerCase()) {
                             
                            // If yes, mark Switch as needed
                            // and break loop
                            Switch = true;
                            break;
                        }
                    } else if (direction == "descending") {
 
                        // Check direction
                        if (x.innerHTML.toLowerCase() <
                        y.innerHTML.toLowerCase()) {
 
                            // If yes, mark Switch as needed
                            // and break loop
                            Switch = true;
                            break;
                        }
                    }
                }
                if (Switch) {
 
                    // Function to switch rows and mark
                    // switch as completed
                    rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
                    switching = true;
 
                    // Increase count for each switch
                    count++;
                } else {
 
                    // Run while loop again for descending order
                    if (count == 0 && direction == "ascending") {
                        direction = "descending";
                        switching = true;
                    }
                }
            }
        }
    </script>
</body>
 
</html>


Output:

 

RELATED ARTICLES

Most Popular

Dominic
32404 POSTS0 COMMENTS
Milvus
97 POSTS0 COMMENTS
Nango Kala
6776 POSTS0 COMMENTS
Nicole Veronica
11924 POSTS0 COMMENTS
Nokonwaba Nkukhwana
11994 POSTS0 COMMENTS
Shaida Kate Naidoo
6904 POSTS0 COMMENTS
Ted Musemwa
7160 POSTS0 COMMENTS
Thapelo Manthata
6859 POSTS0 COMMENTS
Umr Jansen
6846 POSTS0 COMMENTS