• Resolved sfklaas

    (@sfklaas)


    WP Newbie here… I am trying to make a sort-able html table with javascript. And when searching how to do it, I came across this link from w3schools:(https://www.w3schools.com/howto/howto_js_sort_table.asp).

    I just tried copying and pasting the code to my page to see if it works, but it only displays the table without having the clickable headings to sort. I also noticed when I use the “code editor” when editing the WP page in dashboard, some of the code scripts disappear when updating the page. Shouldn’t I just be able to copy and paste this code into my page and it should work? thanks for your help!

    The code I am trying to add:

    <html>
    <head>
    <title>Sort a HTML Table Alphabetically</title>
    <style>
    table {
      border-spacing: 0;
      width: 100%;
      border: 1px solid #ddd;
    }
    
    th {
      cursor: pointer;
    }
    
    th, td {
      text-align: left;
      padding: 16px;
    }
    
    tr:nth-child(even) {
      background-color: #f2f2f2
    }
    </style>
    </head>
    <body>
    
    <p><strong>Click the headers to sort the table.</strong></p>
    <p>The first time you click, the sorting direction is ascending (A to Z).</p>
    <p>Click again, and the sorting direction will be descending (Z to A):</p>
    
    <table id="myTable">
      <tr>
       <!--When a header is clicked, run the sortTable function, with a parameter, 0 for sorting by names, 1 for sorting by country:-->  
        <th onclick="sortTable(0)">Name</th>
        <th onclick="sortTable(1)">Country</th>
      </tr>
      <tr>
        <td>Berglunds snabbkop</td>
        <td>Sweden</td>
      </tr>
      <tr>
        <td>North/South</td>
        <td>UK</td>
      </tr>
      <tr>
        <td>Alfreds Futterkiste</td>
        <td>Germany</td>
      </tr>
      <tr>
        <td>Koniglich Essen</td>
        <td>Germany</td>
      </tr>
      <tr>
        <td>Magazzini Alimentari Riuniti</td>
        <td>Italy</td>
      </tr>
      <tr>
        <td>Paris specialites</td>
        <td>France</td>
      </tr>
      <tr>
        <td>Island Trading</td>
        <td>UK</td>
      </tr>
      <tr>
        <td>Laughing Bacchus Winecellars</td>
        <td>Canada</td>
      </tr>
    </table>
    
    <script>
    function sortTable(n) {
      var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0;
      table = document.getElementById("myTable");
      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;
        rows = table.rows;
        /*Loop through all table rows (except the
        first, which contains table headers):*/
        for (i = 1; i < (rows.length - 1); 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")[n];
          y = rows[i + 1].getElementsByTagName("TD")[n];
          /*check if the two rows should switch place,
          based on the direction, asc or desc:*/
          if (dir == "asc") {
            if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
              //if so, mark as a switch and break the loop:
              shouldSwitch= true;
              break;
            }
          } else if (dir == "desc") {
            if (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) {
              //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;
          //Each time a switch is done, increase this count 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>
    
    </body>
    </html>

    The page I need help with: [log in to see the link]

Viewing 2 replies - 1 through 2 (of 2 total)
  • Thread Starter sfklaas

    (@sfklaas)

    Not sure if this was the proper way, but I got it working by adding the “scripts n styles” plugin and copied/pasted the code above in the “Scripts” section and in the “html” section.

    Moderator bcworkz

    (@bcworkz)

    I’m glad you found a solution!

    FWIW, you cannot place script blocks within the WP page editor, as you have discovered. The editor’s parser corrupts scripts placed there. A script plugin is indeed the easiest solution. Alternatives include adding script via shortcode, enqueuing script placed in an external file, or adding script into a custom page template.

    For the benefit of anyone landing here via search as much as FYI 🙂

Viewing 2 replies - 1 through 2 (of 2 total)

The topic ‘Trying to sort html table with javascript on page’ is closed to new replies.