htmljqueryhtml-tableclickslidetoggle

Expanding and collapsing table row (tr) using jquery


enter image description here

I have a table with active and inactive items. This table is dynamically populated from database. I am trying to add a toggle for only inactive items in my table and display all active items. I mean I want to show all active items and slide toggle only inactive items in my table.

<div class="alertsList">
    <table width="100%">
        <tbody>
            <tr>
                <th></th>
                <th>Id</th>
                <th>From</th>
                <th>Action</th>
                <th>State</th>
                <th>time</th>
                <tr class="alertRow">
                    <td></td>
                    <td>1025973</td>
                    <td>SYSTEM</td>
                    <td>false</td>
                    <td class="Active">Active</td>
                    <td>2014-09-23T00:59:26.92</td>
                </tr>
                <tr class="alertRow">
                    <td></td>
                    <td>1025974</td>
                    <td>SYSTEM</td>
                    <td>false</td>
                    <td class="Active">Active</td>
                    <td>2014-09-23T00:59:26.92</td>
                </tr>
                <tr class="alertRow">
                    <td></td>
                    <td>1025974</td>
                    <td>SYSTEM</td>
                    <td>false</td>
                    <td class="InActive">InActive</td>
                    <td>2014-09-23T00:59:26.92</td>
                </tr>
                <tr class="alertRow">
                    <td></td>
                    <td>1025974</td>
                    <td>SYSTEM</td>
                    <td>false</td>
                    <td class="InActive">InActive</td>
                    <td>2014-09-23T00:59:26.92</td>
                </tr>
                <tr class="alertRow">
                    <td></td>
                    <td>1025974</td>
                    <td>SYSTEM</td>
                    <td>false</td>
                    <td class="Active">Active</td>
                    <td>2014-09-23T00:59:26.92</td>
                </tr>
        </tbody>
    </table>
</div>

$('.alertRow.InActive').Parent.click(function () {

    $(this).nextUntil('tr.td.InActive').slideToggle(1000);
});

My Fiddle code

How can I do that..?


Solution

  • Here's the code to toggle the table rows which are "inactive". It's better to rely on "closest()" than "parent()" or "parents()", because it's faster and it makes more sense to use it in this case.

    $(document).ready(function() {
    
      // Save all the inactive rows
      var inactive_rows = '';
      $('.InActive').closest("tr").each(function() {
        inactive_rows += '<tr class="alertRow">';
        inactive_rows += $(this).html();
        inactive_rows += '</tr>';
      });
      console.log(inactive_rows);
      // Save all the active rows
      var active_rows = "";
      $('.Active').closest("tr").each(function() {
        active_rows += '<tr class="alertRow">';
        active_rows += $(this).html();
        active_rows += '</tr>';
      });
      // Empty the table
      $('.alertsList').html("");
      // Load the new table
      var table_html = '<table width="100%"><thead><th></th><th>Id</th><th>From</th><th>Action</th><th>State</th><th>time</th></thead><tbody>';
      table_html += active_rows;
      table_html += inactive_rows;
      table_html += '</tbody></table><a href="" class="toggleInactiveRows">Toggle Inactive Rows</a>';
      $('.alertsList').append(table_html);
    
      // Hide the inactive rows when the page loads
      $('.InActive').closest("tr").hide();
    
      // Toggle the inactive rows
      $('.toggleInactiveRows').click(function() {
        $('.InActive').closest("tr").slideToggle();
        return false;
      });
    
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div class="alertsList">
      <table width="100%">
        <thead>
          <th></th>
          <th>Id</th>
          <th>From</th>
          <th>Action</th>
          <th>State</th>
          <th>time</th>
        </thead>
        <tbody>
          <tr class="alertRow">
            <td></td>
            <td>1025973</td>
            <td>SYSTEM</td>
            <td>false</td>
            <td class="Active">Active</td>
            <td>2014-09-23T00:59:26.92</td>
          </tr>
          <tr class="alertRow">
            <td></td>
            <td>1025974</td>
            <td>SYSTEM</td>
            <td>false</td>
            <td class="Active">Active</td>
            <td>2014-09-23T00:59:26.92</td>
          </tr>
          <tr class="alertRow">
            <td></td>
            <td>1025974</td>
            <td>SYSTEM</td>
            <td>false</td>
            <td class="InActive">InActive</td>
            <td>2014-09-23T00:59:26.92</td>
          </tr>
          <tr class="alertRow">
            <td></td>
            <td>1025974</td>
            <td>SYSTEM</td>
            <td>false</td>
            <td class="InActive">InActive</td>
            <td>2014-09-23T00:59:26.92</td>
          </tr>
          <tr class="alertRow">
            <td></td>
            <td>1025974</td>
            <td>SYSTEM</td>
            <td>false</td>
            <td class="Active">Active</td>
            <td>2014-09-23T00:59:26.92</td>
          </tr>
        </tbody>
      </table>
      <a href="" class="toggleInactiveRows">Toggle Inactive Rows</a>
    </div>