简体   繁体   English

如何使用 JavaScript/jQuery“this”关键字来切换行

[英]How to use JavaScript/jQuery "this" keyword to toggle rows

I have a form that will post data to a table and will separate the data into two rows, a row-header and a row-body (similar to bootstrap accordion card-header and card-body).我有一个表单,它将数据发布到一个表中,并将数据分成两行,一个行标题和一个行正文(类似于引导手风琴卡标题和卡正文)。 Initially, whenever I click on a button it toggles both row-bodies.最初,每当我单击按钮时,它都会切换两个行体。 Now, it's now only toggling the first row body.现在,它现在只切换第一行主体。

How do you use the this keyword so that when I click on button1 on row-header1 , it toggles row-body1 , and button2 on row-header2 toggles row-body2 ?你如何使用this关键字,这样当我点击button1row-header1 ,它切换row-body1button2row-header2切换row-body2

This is the code I'm actually working with, but it contains ejs:这是我实际使用的代码,但它包含 ejs:

<table class="table table-hover table-sm">
<thead>
  <tr>
    <th><i class="fas fa-cart-plus"></i></th>
    <th>Deadline</th>
    <th>Award</th>
    <th>Fee</th>
    <th>#Copies</th>
    <th>Genre</th>
    <th>More Info</th>
  </tr>
</thead>

<tbody>
  <!--Row header-->
  <tr id="table-header">
    <% awards.forEach(function(award){ %>
    <td><input type="checkbox" name="" value=""/></td>
    <td><%= award.deadline %></td>
    <td><%= award.awdname %></td>
    <td>$<%= award.fee %></td>
    <td><%= award.copies %></td>
    <td><%= award.genre %></td>
    <td><button id="moreInfo">Click Me</i></button></td>

  <!--Row body    -->
  <tr id="table-body">
    <td colspan="7">
      <div class="showContent hide"><label for="">Description:</label> <%= award.desc %></div>
      <div class="showContent hide"><label for="">Sponsored by:</label> <%= award.sponsor %></div>
      <div class="showContent hide"><label for="">Prize: $</label><%= award.prize %></div>
      <div class="showContent hide"><label for="">Shipping status:</label> <%= award.postorarrive %></div>
      <div class="showContent hide"><label for="">Website:</label> <%= award.url %></div>
    </td>
  </tr>
  <tr><% }); %></tr>               
</tbody>
</table>

SCRIPT脚本

$("#table-body").hide();

$("#moreInfo").on("click", function() {
    $("#table-body").toggle();
});

See my JSFiddle for a modified version of the above code but without ejs.见我的jsfiddle上面的代码修改后的版本,但没有EJS。

I've spent days looking at similar questions and trying to adapt the given answers to my scenario but with no success.我花了几天时间研究类似的问题,并试图根据我的情况调整给定的答案,但没有成功。

You should not use id as a selector for multiple buttons, because every element, in order to be properly selected by id should be unique, and thus selected one by one.你不应该使用id作为多个按钮的选择器,因为每个元素,为了被id正确选择,都应该是唯一的,从而一个一个选择。 For common functionality, when multiple similar elements to be selected class should be used instead.对于通用功能,当要选择多个相似元素时,应使用class代替。

<table class="table table-hover table-sm">
    <thead>
        <tr>
            <td>Row#</td>
            <th><i class="fas fa-cart-plus"></i></th>
            <th>Column1</th>
            <th>Column2</th>
            <th>Column3</th>
            <th>Details</th>
        </tr>
    </thead> 
    <tbody>
        <!--Row header-->
        <tr>
            <td>1</td>
            <td><input type="checkbox" name="" value=""/></td>
            <td>Row1 Content1</td>
            <td>R1C2</td>
            <td>R1C3</td>
            <td><button class="moreInfo">Click Me</button></td> 
        </tr> 
        <!--Row body   -->
        <tr class="table-body">
            <td colspan="7" class="hiddenRow">
                <div class="showContent"><label for="">Description1:</label></div>  
            </td>
        </tr> 
        <tr>
            <td>2</td>
            <td><input type="checkbox" name="" value=""/></td>
            <td>Row2 Content1</td>
            <td>R2C2</td>
            <td>R2C3</td>
            <td><button class="moreInfo">Click Me</button></td> 
        </tr> 
        <!--Row body   -->
        <tr class="table-body">
            <td colspan="7" class="hiddenRow">
                <div class="showContent"><label for="">Description2:</label></div>  
            </td>
        </tr> 
    </tbody>
</table>

$(".table-body").hide();
$(".moreInfo").on("click", function(){
    $(this).parent().parent().next().toggle();
});

https://jsfiddle.net/kaxocr7h/1/ https://jsfiddle.net/kaxocr7h/1/

 $(".table-body").hide(); $(document).on("click", ".moreInfo", function(){ $(this).parent().parent().next().toggle(); });
 .row { background: #f8f9fa; margin-top: 20px; } .col { border: solid 1px #6c757d; padding: 10px; }
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <!-- Bootstrap docs: https://getbootstrap.com/docs --> <table class="table table-hover table-sm"> <thead> <tr> <td>Row#</td> <th><i class="fas fa-cart-plus"></i></th> <th>Column1</th> <th>Column2</th> <th>Column3</th> <th>Details</th> </tr> </thead> <tbody> <!--Row header--> <tr id="table-header"> <td>1</td> <td><input type="checkbox" name="" value=""/></td> <td>Row1 Content1</td> <td>R1C2</td> <td>R1C3</td> <td><button id="moreInfo" class="moreInfo">Click Me</button></td> </tr> <!--Row body --> <tr id="table-body" class="table-body"> <td colspan="7" class="hiddenRow"> <div class="showContent hide"><label for="">Description1:</label></div> </td> </tr> <tr id="table-header"> <td>2</td> <td><input type="checkbox" name="" value=""/></td> <td>Row2 Content1</td> <td>R2C2</td> <td>R2C3</td> <td><button id="moreInfo" class="moreInfo">Click Me</button></td> </tr> <!--Row body --> <tr id="table-body" class="table-body"> <td colspan="7" class="hiddenRow"> <div class="showContent hide"><label for="">Description2:</label></div> </td> </tr> </tbody> </table>

Add a class for moreInfo button and the table row that have to be toggled为更多信息按钮和必须切换的表格行添加一个类

    <table class="table table-hover table-sm">
        <thead>
            <tr>
                <td>Row#</td>
                <th><i class="fas fa-cart-plus"></i></th>
                <th>Column1</th>
                <th>Column2</th>
                <th>Column3</th>
                <th>Details</th>
            </tr>
        </thead>

        <tbody>
            <!--Row header-->
            <tr id="table-header">
                <td>1</td>
                <td><input type="checkbox" name="" value=""/></td>
                <td>Row1 Content1</td>
                <td>R1C2</td>
                <td>R1C3</td>
                <td><button id="moreInfo" class="moreInfo">Click Me</button></td> 
            </tr>

            <!--Row body   -->
            <tr id="table-body" class="table-body">
                <td colspan="7" class="hiddenRow">
                    <div class="showContent hide"><label for="">Description1:</label></div>  
                </td>
            </tr>

            <tr id="table-header">
                <td>2</td>
                <td><input type="checkbox" name="" value=""/></td>
                <td>Row2 Content1</td>
                <td>R2C2</td>
                <td>R2C3</td>
                <td><button id="moreInfo"  class="moreInfo">Click Me</button></td> 
            </tr>


            <!--Row body   -->
            <tr id="table-body" class="table-body">
                <td colspan="7" class="hiddenRow">
                    <div class="showContent hide"><label for="">Description2:</label></div>  
                </td>
            </tr>

        </tbody>
    </table>






    $(".table-body").hide();
$(document).on("click", ".moreInfo", function(){
   $(this).parent().parent().next().toggle();
});

id should be unique, Look into below code with class selector. id应该是唯一的,使用class选择器查看下面的代码。

 $(document).ready(function() { $(".table-body").hide(); $(".moreInfo").on("click", function() { $(this).closest('tr').next(".table-body").toggle(); }); });
 .row { background: #f8f9fa; margin-top: 20px; } .col { border: solid 1px #6c757d; padding: 10px; }
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <table class="table table-hover table-sm"> <thead> <tr> <td>Row#</td> <th><i class="fas fa-cart-plus"></i></th> <th>Column1</th> <th>Column2</th> <th>Column3</th> <th>Details</th> </tr> </thead> <tbody> <!--Row header--> <tr id="table-header"> <td>1</td> <td><input type="checkbox" name="" value="" /></td> <td>Row1 Content1</td> <td>R1C2</td> <td>R1C3</td> <td><button class="moreInfo">Click Me</button></td> </tr> <!--Row body --> <tr class="table-body"> <td colspan="7" class="hiddenRow"> <div class="showContent hide"><label for="">Description1:</label></div> </td> </tr> <tr id="table-header"> <td>2</td> <td><input type="checkbox" name="" value="" /></td> <td>Row2 Content1</td> <td>R2C2</td> <td>R2C3</td> <td><button class="moreInfo">Click Me</button></td> </tr> <!--Row body --> <tr class="table-body"> <td colspan="7" class="hiddenRow"> <div class="showContent hide"><label for="">Description2:</label></div> </td> </tr> </tbody> </table>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM