Search code examples
javascriptjqueryhtml-tabletoggleshow-hide

Toggle that reveal text one at a time by click


I have a problem with my code. The goal is to have a text that appear when a user click on the link. But I want also that when he clicks on the link the only text that show is the text underneath and not in all the cells. Can someone has a clue on what I did wrong? I will probable add other links (more than 2) and I want to be sure that it will work every time.

$(document).ready(function() {
  $(".toggler").click(function(e) {
    e.preventDefault();
    $('.cat' + $(this).attr('data-prod-cat')).toggle();
  });
});
a {
  color: #002642;
}

.center {
  text-align: center;
}

.toggler,
.cat1 {
  font-family: 'Varela Round';
  color: white;
}

td {
  display: block;
  width: auto;
  border: 1px dotted #c4a77d;
  background-color: #c4a77d;
  color: white;
  margin-bottom: 10px;
}

@media only screen and (min-width: 70em) {
  td {
    display: table-cell;
    border: 1px dotted #c4a77d;
    background-color: #c4a77d;
    color: white;
    margin-bottom: 0px;
  }
}

p {
  font-family: 'Varela Round';
  font-weight: bold;
  text-align: center;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<table cellpadding="0" cellspacing="5" style="table-layout: fixed; width:100%" width="100%">
  <tbody>
    <tr>
      <td>
        <table style="width: 100%;text-align:center;">
          <tbody>
            <tr>
              <td>
                <p>SOCIÉTÉS: 230</p>
              </td>
            </tr>
            <tr>
              <td><a class="toggler" data-prod-cat="1" href="#">+ En savoir plus</a></td>
            </tr>
            <tr class="cat1" style="display:none">
              <td>Part CAC 40 : 40</td>
            </tr>
            <tr class="cat1" style="display:none">
              <td>Part Filiales +100MK€: 190</td>
            </tr>
          </tbody>
        </table>
      </td>
      <td>
        <table style="width: 100%;text-align:center;">
          <tbody>
            <tr>
              <td>
                <p>CONTACTS: 16 700</p>
              </td>
            </tr>
            <tr>
              <td><a class="toggler" data-prod-cat="1" href="#">+ En savoir plus</a></td>
            </tr>
            <tr class="cat1" style="display:none">
              <td>Part CAC 40 : 10 000</td>
            </tr>
            <tr class="cat1" style="display:none">
              <td>Part Filiales +100MK€: 6 700</td>
            </tr>
          </tbody>
        </table>
      </td>
      <td>
        <p>EMAIL NOMINATIF</p>
      </td>
      <td>
        <p>OPT OUT</p>
      </td>
      <td>
        <p>LIGNES DIRECTES/MOBILES</p>
      </td>
    </tr>
  </tbody>
</table>


Solution

  • You have just to go up to the parent table using closest('table') function and then select all the text's related to the current clicked .toggler using .find('[class^="cat"]') like :

    $(document).ready(function() {
      $(".toggler").click(function(e) {
        e.preventDefault();
    
        $(this).closest('table').find('[class^="cat"]').toggle();
      });
    });
    

    Hope this helps.

    $(document).ready(function() {
      $(".toggler").click(function(e) {
        e.preventDefault();
        
        $(this).closest('table').find('[class^="cat"]').toggle();
      });
    });
    a {
      color: #002642;
    }
    
    .center {
      text-align: center;
    }
    
    .toggler,
    .cat1 {
      font-family: 'Varela Round';
      color: white;
    }
    
    td {
      display: block;
      width: auto;
      border: 1px dotted #c4a77d;
      background-color: #c4a77d;
      color: white;
      margin-bottom: 10px;
    }
    
    @media only screen and (min-width: 70em) {
      td {
        display: table-cell;
        border: 1px dotted #c4a77d;
        background-color: #c4a77d;
        color: white;
        margin-bottom: 0px;
      }
    }
    
    p {
      font-family: 'Varela Round';
      font-weight: bold;
      text-align: center;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
    <table cellpadding="0" cellspacing="5" style="table-layout: fixed; width:100%" width="100%">
      <tbody>
        <tr>
          <td>
            <table style="width: 100%;text-align:center;">
              <tbody>
                <tr>
                  <td>
                    <p>SOCIÉTÉS: 230</p>
                  </td>
                </tr>
                <tr>
                  <td><a class="toggler" data-prod-cat="1" href="#">+ En savoir plus</a></td>
                </tr>
                <tr class="cat1" style="display:none">
                  <td>Part CAC 40 : 40</td>
                </tr>
                <tr class="cat1" style="display:none">
                  <td>Part Filiales +100MK€: 190</td>
                </tr>
              </tbody>
            </table>
          </td>
          <td>
            <table style="width: 100%;text-align:center;">
              <tbody>
                <tr>
                  <td>
                    <p>CONTACTS: 16 700</p>
                  </td>
                </tr>
                <tr>
                  <td>
                    <a class="toggler" data-prod-cat="1" href="#">+ En savoir plus</a></td>
                </tr>
                <tr class="cat1" style="display:none">
                  <td>Part CAC 40 : 10 000</td>
                </tr>
                <tr class="cat1" style="display:none">
                  <td>Part Filiales +100MK€: 6 700</td>
                </tr>
              </tbody>
            </table>
          </td>
          <td>
            <p>EMAIL NOMINATIF</p>
          </td>
          <td>
            <p>OPT OUT</p>
          </td>
          <td>
            <p>LIGNES DIRECTES/MOBILES</p>
          </td>
        </tr>
      </tbody>
    </table>