jQuery highlighting selected columns only in a table

后端 未结 6 1094
长发绾君心
长发绾君心 2021-01-02 19:46

I see this post on highlighting even columns but can I highlight only selected columns?

Here is the code they use:

$(\"table.Table22 > tbody >          


        
相关标签:
6条回答
  • 2021-01-02 20:18

    You might want to take a look at jQuery tableHover plugin to achieve this. Then use something like this

    $('table.tbl').tableHover({
        colClass: 'hover', 
        clickClass: 'click', 
        headCols: true, 
        footCols: true 
    }); 
    

    EDIT:

    Something like this?

    Working Demo - Click on any cell, to highlight the column

    Code from demo -

    $(function() {
      var rows = $('table.tbl tr');  
    
      rows.children().click(function() {
    
        rows.children().removeClass('highlight');  
        var index = $(this).prevAll().length;  
        rows.find(':nth-child(' + (index + 1) + ')').addClass('highlight');
    
      });
    });
    
    0 讨论(0)
  • 2021-01-02 20:24

    have you concidered using colgroups instead of adding classes to every cell?

    i only recently started to see the power of colgroups myself, and they work like this:

    .highlight {
        background-color: yellow; 
     }
         <table id="myTable">
        	   
        	       <colgroup class="highlight"></colgroup>
        	       <colgroup></colgroup>
        	       <colgroup></colgroup>
        	       <colgroup></colgroup>
        	       <colgroup></colgroup>
        	   
        	    <thead>
        	       <tr>
        	           <th>header1</th>
        	           <th>header2</th>
        	           <th>header3</th>
        	           <th>header4</th>
        	           <th>header5</th>
        	       </tr>
        	    </thead>
        	    <tbody>
        	       <tr>
        	           <td>cell a</td>
        	           <td>cell b</td>
        	           <td>cell c</td>
        	           <td>cell d</td>
        	           <td>cell e</td>
        	       </tr>
            	<tbody>
         <table>

    this would render a table with 5 columns, where 1 column has css class to highlight the first col. so actually the only thing you have to do then, add a function to the hover of each cell, to just add the highlighting class to the corresponding colgroup.

    there is a complete videoguide you can find right here:table fix header, and row + column highlighting.

    *EDITED the answer because it was irrelevant, i read the question wrong, and answered to a totally different matter. (added a correct reply now)

    0 讨论(0)
  • 2021-01-02 20:33

    If you want to support colspan and rowspan, then first you need to build table cell index, ie. matrix that identifies cell positition in every row regardless of the markup. Then you need to track events of all the table cells of interest and calculate their offset in the matrix and the columns that share the vertical index.

    The resulting lookup is illustrated in the following animation:

    wholly table index

    I have written a plugin that triggers an wholly.mouseenter and wholly.mouseleave events for columns. Wholly.

    0 讨论(0)
  • 2021-01-02 20:36

    If you create a link in your table headers, you can do something like this:

    $("table.tbl th a").click(function() {
       var colnum = $(this).closest("th").prevAll("th").length;
    
       $(this).closest("table").find("tr td").removeClass("highlight");
       $(this).closest("table").find("tr td:eq(" + colnum + ")").addClass("highlight");
    }
    

    That will set all cells below the clicked link to class "highlight".

    Of course, you should still set the correct style in your CSS file:

    table.tbl tr .highlight {  background-color: blue; }
    
    0 讨论(0)
  • 2021-01-02 20:41

    You can use a plugin called wholly. You can read the full tutorial on how to integrate it here http://voidtricks.com/wholly-jquery-plugin/

    0 讨论(0)
  • 2021-01-02 20:42

    Here's what I use for adding a cross-hair affect to my table:

    $('tbody td').hover(function() {
        $(this).closest('tr').find('td,th').addClass('highlight');
        var col = $(this).index()+1;
        $(this).closest('table').find('tr :nth-child('+col+')').addClass('highlight');
    }, function() {
        $(this).closest('tr').find('td,th').removeClass('highlight');
        var col = $(this).index()+1;
        $(this).closest('table').find('tr :nth-child('+col+')').removeClass('highlight');
    });
    

    Seems to run a bit slow on large tables though (the highlighting lags behind).

    0 讨论(0)
提交回复
热议问题