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>
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:
$('.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.