简体   繁体   中英

Highlight only one cell per row

My goal is to be able to highlight a cell when clicked and un-highlight when clicked again.

Each row can have only one cell highlighted.

Below is my attempted code and here is the fiddle .

Thanks.

HTML:

<div class="hws-css-filter" >
  <div class="hws-css-filter-tr">
    <div class="hws-css-filter-td"></div>
    <div class="hws-css-filter-td"></div>
    <div class="hws-css-filter-td"></div>
  </div>
  <div class="hws-css-filter-tr">
    <div class="hws-css-filter-td"></div>
    <div class="hws-css-filter-td"></div>
    <div class="hws-css-filter-td"></div>
  </div>
</div>

jQuery

$('.hws-css-filter-td').click(function () {
    var theTable = $(this).closest('.hws-css-filter-tr');
    $(theTable).each(function () {
        $(this).css("background-color", "");
    });
    $(this).css("background-color", "blue");
});

Remove the background color of all siblings first like following.

 $('.hws-css-filter-td').click(function() { $(this).siblings().css("background-color", ""); $(this).css("background-color", "blue"); }); 
 .hws-css-filter { display: table; margin: auto; vertical-align: middle; } .hws-css-filter-tr { display: table-row; padding: 0; margin: 0; } .hws-css-filter-td { display: table-cell; border: 1px solid #000; width: 15px; height: 15px; line-height: 15px; text-align: center; vertical-align: middle; padding: 0; margin: 0; font-family: monospace; font-size: 10px; text-transform: uppercase; cursor: pointer; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="hws-css-filter"> <div class="hws-css-filter-tr"> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> </div> <div class="hws-css-filter-tr"> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> </div> <div class="hws-css-filter-tr"> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> </div> </div> 

UPDATE: To select unselected.

 $('.hws-css-filter-td').click(function() { $(this).siblings().removeClass('selected'); $(this).toggleClass('selected'); }); 
 .hws-css-filter { display: table; margin: auto; vertical-align: middle; } .hws-css-filter-tr { display: table-row; padding: 0; margin: 0; } .hws-css-filter-td { display: table-cell; border: 1px solid #000; width: 15px; height: 15px; line-height: 15px; text-align: center; vertical-align: middle; padding: 0; margin: 0; font-family: monospace; font-size: 10px; text-transform: uppercase; cursor: pointer; } .selected { background-color: blue; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="hws-css-filter"> <div class="hws-css-filter-tr"> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> </div> <div class="hws-css-filter-tr"> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> </div> <div class="hws-css-filter-tr"> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> </div> </div> 

UPDATED FIDDLE

To better manage cell formatting, create a new style for highlighted cells

.cell_highlight{
    background-color: blue;
}

and set the jQuery event:

$('.hws-css-filter-td').click(function () {
    $(this).siblings().removeClass("cell_highlight"); 
    $(this).addClass("cell_highlight");
});

This will satisfy all of your requests:

  1. Highlight on click
  2. Un-highlight if clicked again
  3. Only one highlighted cell allowed per row

 $('.hws-css-filter-td').on('click', function() { var $this = $(this); if ($this.hasClass('blue-highlight')) { $this.removeClass('blue-highlight'); } else { $this.addClass('blue-highlight'); $this.siblings().removeClass('blue-highlight'); } }); 
 .hws-css-filter-td { border: solid 1px #000; height: 25px; width: 25px; float: left; } .hws-css-filter-tr { clear: left; } .blue-highlight { background-color: blue; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="hws-css-filter" > <div class="hws-css-filter-tr"> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> </div> <div class="hws-css-filter-tr"> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> <div class="hws-css-filter-td"></div> </div> </div> 

Based on Figor's answer but also with toggling the highlighted cell https://jsfiddle.net/dwsL9z63/5/

   $('.hws-css-filter-td').click(function () {
      if($(this).hasClass("cell_highlight")){
        $(this).removeClass("cell_highlight");
      }
      else{
         $(this).addClass("cell_highlight");
      }

      $(this).siblings().removeClass("cell_highlight");

   });

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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