how to make a whole row in a table clickable as a link?

前端 未结 26 1638
粉色の甜心
粉色の甜心 2020-11-22 14:05

I\'m using Bootstrap and the following doesn\'t work:


    
        
            Blah Blah
           


        
相关标签:
26条回答
  • 2020-11-22 14:11

    There is a nice way to technically do it with <a> tag inside <tr>, which might be semantically incorrect (might give you a browser warning), but will work with no JavaScript/jQuery required:

    <!-- HTML -->
    <tbody>
      <tr class="bs-table-row">
         <td>Blah Blah</td>
         <td>1234567</td>
         <td>£158,000</td>
         <a class="bs-row-link" href="/your-link-here"></a>
      </tr>
    </tbody>
    
    /* CSS */
    .bs-table-row {
      position: 'relative';
    }
    
    .bs-row-link {
      position: 'absolute';
      left: 0;
      height: '36px'; // or different row height based on your requirements
      width: '100%';
      cursor: 'pointer';
    }
    

    PS: Notice the trick here is to put <a> tag as last element, otherwise it will try to take the space of the first <td> cell.

    PPS: Now your entire row will be clickable and you can use this link to open in new tab as well (Ctrl/CMD+click)

    0 讨论(0)
  • Here is simple solution..

    <tr style='cursor: pointer; cursor: hand;' onclick="window.location='google.com';"></tr>
    
    0 讨论(0)
  • 2020-11-22 14:13

    I know someone has written pretty much the same already, however my way is the correct way (div cannot be child of A) and also it's better to use classes.

    You can imitate a table using CSS and make an A element the row

    <div class="table" style="width:100%;">
      <a href="#" class="tr">
        <span class="td">
          cell 1
        </span>
        <span class="td">
          cell 2
        </span>
      </a>
    </div>
    

    css:

    .table{display:table;}
    .tr{display:table-row;}
    .td{display:table-cell;}
    .tr:hover{background-color:#ccc;}
    
    0 讨论(0)
  • 2020-11-22 14:14

    Why should we don't use "div" tags....

    <div>
    
      <a href="" >     <div>  Table row  of content here..  </div>    </a>
    
    </div>
    
    0 讨论(0)
  • 2020-11-22 14:15

    Author's note I:

    Please look at other answers below, especially ones that do not use jquery.

    Author's note II:

    Preserved for posterity but surely the wrong approach in 2020. (Was non idiomatic even back in 2017)

    Original Answer

    You are using Bootstrap which means you are using jQuery :^), so one way to do it is:

    <tbody>
        <tr class='clickable-row' data-href='url://'>
            <td>Blah Blah</td> <td>1234567</td> <td>£158,000</td>
        </tr>
    </tbody>
    
    
    jQuery(document).ready(function($) {
        $(".clickable-row").click(function() {
            window.location = $(this).data("href");
        });
    });
    

    Of course you don't have to use href or switch locations, you can do whatever you like in the click handler function. Read up on jQuery and how to write handlers;

    Advantage of using a class over id is that you can apply the solution to multiple rows:

    <tbody>
        <tr class='clickable-row' data-href='url://link-for-first-row/'>
            <td>Blah Blah</td> <td>1234567</td> <td>£158,000</td>
        </tr>
        <tr class='clickable-row' data-href='url://some-other-link/'>
            <td>More money</td> <td>1234567</td> <td>£800,000</td>
        </tr>
    </tbody>
    

    and your code base doesn't change. The same handler would take care of all the rows.

    Another option

    You can use Bootstrap jQuery callbacks like this (in a document.ready callback):

    $("#container").on('click-row.bs.table', function (e, row, $element) {
        window.location = $element.data('href');
    });
    

    This has the advantage of not being reset upon table sorting (which happens with the other option).


    Note

    Since this was posted window.document.location is obsolete (or deprecated at the very least) use window.location instead.

    0 讨论(0)
  • 2020-11-22 14:16

    Here is another way...

    The HTML:

    <table>
    <tbody>
           <tr class='clickableRow'>
           <td>Blah Blah</td>
           <td>1234567</td>
           <td>£158,000</td>
            </tr>
    </tbody>
    </table>
    

    The jQuery:

    $(function() {
          $(".clickableRow").on("click", function() {
              location.href="http://google.com";
    
          });
    
    });
    
    0 讨论(0)
提交回复
热议问题