JSFiddle Demo (edited to match comments)
I change the color of the text when changing the checkbox by adding a class. For each, I check whether both corresponding checkboxes (row and column) are cleared before deleting the class.
HTML
<table id="example"> <thead> <tr> <th></th> <th>A <input type="checkbox" /></th> <th>B <input type="checkbox" /></th> <th>C <input type="checkbox" /></th> <th>D <input type="checkbox" /></th> </tr> </thead> <tbody> <tr> <td>1 <input type="checkbox"></td> <td>A1</td> <td>A2</td> <td>A3</td> <td>A4</td> </tr> <tr> <td>2 <input type="checkbox"></td> <td>B1</td> <td>B2</td> <td>B3</td> <td>B4</td> </tr> <tr> <td>3 <input type="checkbox"></td> <td>C1</td> <td>C2</td> <td>C3</td> <td>C4</td> </tr> </tbody>
JQuery
var headers = $('#example th'); $(':checkbox', '#example').change(function(e){ var isChecked = $(this).is(':checked'); if( $(this).closest('thead').length ){ //columns checkboxes //getting the column index var i = headers.index( $(this).parent() ); $('tbody tr', '#example').each(function(){ var isLineChecked = $(':checkbox:checked', this).length; if( isChecked && isLineChecked ){ $(this).find('td:eq('+i+')').addClass('selected'); } else { $(this).find('td:eq('+i+')').removeClass('selected'); } }); } else { //line checkbox var columnsCheckboxes = $(':checkbox', headers); $(this).parent().siblings().each(function(i, td){ if( isChecked && columnsCheckboxes.eq(i).is(':checked') ){ $(this).addClass('selected'); } else { $(this).removeClass('selected'); } }); } });
source share