通过单击切换一次显示一个文本

时间:2017-11-13 15:39:30

标签: javascript jquery html-table toggle show-hide

我的代码有问题。目标是在用户单击链接时显示文本。但我还要求当他点击链接时,显示的唯一文本是下面的文本而不是所有单元格。有人能否知道我做错了什么?我可能会添加其他链接(超过2个),我想确保它每次都能正常工作。

$(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>

3 个答案:

答案 0 :(得分:1)

您只需使用table函数转到父closest('table'),然后使用.toggler选择与当前点击的.find('[class^="cat"]')相关的所有文字:

$(document).ready(function() {
  $(".toggler").click(function(e) {
    e.preventDefault();

    $(this).closest('table').find('[class^="cat"]').toggle();
  });
});

希望这会有所帮助。

$(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>

答案 1 :(得分:0)

首先需要获取<a>,然后获取{strong>父 <tr>。最后在cat1类上过滤以切换包含cat1类的所有兄弟。

$(document).ready(function() {
  $(".toggler").click(function(e) {
    e.preventDefault();
    $(this).parent().parent().siblings().filter(".cat1").toggle();
  });
});

&#13;
&#13;
$(document).ready(function() {
  $(".toggler").click(function(e) {
    e.preventDefault();
    $(this).parent().parent().siblings().filter(".cat1").toggle();
  });
});
&#13;
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;
}
&#13;
<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>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

根据您的代码,我猜您尝试使用data-prod-cat属性来了解需要显示哪个块。

但是在你的两个块中都有data-prod-cat="1",这意味着你将在每个动作上激活两个块。

尝试将第二个块属性更改为:

data-prod-cat="2" 

您还需要更新其他<tr>

中的css类