javascript - jQuery 表格排序更改按列排序的颜色 :

标签 javascript jquery html sorting

我有以下 html 表格和 jQuery 函数,用于按表格标题列对表格进行排序:

//sort summary table
$('th').click(function() {
  var table = $(this).parents('table').eq(0)
  var rows = table.find('tr:gt(0)').toArray().sort(comparer($(this).index()))
  this.asc = !this.asc;
  if (!this.asc) {
    rows = rows.reverse();
  }

  for (var i = 0; i < rows.length; i++) {
    table.append(rows[i]);
  }
});
	
function comparer(index) {
  return function(a, b) {
	var valA = getCellValue(a, index), 
        valB = getCellValue(b, index)
    return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.localeCompare(valB)
  }
}
      
function getCellValue(row, index) { 
  return $(row).children('td').eq(index).text();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <thead>
	<tr>
	  <th>S.No.</th>
	  <th>School</th>
	  <th>Campus City / State</th>
	  <th>Campaign Name</th>
	  <th>Work Order</th>
	</tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>EL PASO UNIVERSITY</td>
      <td> EL PASO/TX</td>
      <td>Full Campaign</td>
      <td>#10055</td>
    </tr>
    <tr>
      <td>2</td>
      <td>DALLAS UNIVERSITY</td>
      <td> DALLAS/TX</td>
      <td>Mini Campaign</td>
      <td>#10056</td>
    </tr>
    <tr>
    <td>3</td>
   	      <td>MINNESOTA UNIVERSITY</td>
      <td> MINNEAPOLIS/MN</td>
      <td>Full Campaign</td>
      <td>#10059</td>	
    </tr>
  </tbody>
</table>

排序表的所有功能都运行良好。但无法弄清楚如何让用户知道当前的顺序 表按哪一列排序。我只想添加简单的 css 颜色来分隔当前单击的列。有什么想法吗?

最佳答案

将 css 颜色添加到除单击的标题之外的所有标题即可。这可以通过类似的方式实现:

$('th').css({'background-color' : '#808080'}); 
$('th').css({'color' : '#FFFFFF'});
$(this).css('background-color', '#6f3d3d'); //change the background color
$(this).css({'color' : '#0000FF'});    //change the font color

只需将上面的代码添加到您的函数中:

//sort summary table
$('th').click(function(){
  //add your css trick
  $('th').css({'background-color' : '#808080'});
  $('th').css({'color' : '#FFFFFF'});
  $(this).css('background-color', '#6f3d3d');
  $(this).css({'color' : '#0000FF'});

  var table = $(this).parents('table').eq(0)
  var rows = table.find('tr:gt(0)').toArray().sort(comparer($(this).index()))
  this.asc = !this.asc
  if (!this.asc) {
    rows = rows.reverse();
  }
  for (var i = 0; i < rows.length; i++) {
    table.append(rows[i]);
  }
});
	
function comparer(index) {
  return function(a, b) {
    var valA = getCellValue(a, index), 
        valB = getCellValue(b, index)
      return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.localeCompare(valB)
  }
}
      
function getCellValue(row, index) { 
  return $(row).children('td').eq(index).text();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <thead>
    <tr>
      <th>S.No.</th>
      <th>School</th>
      <th>Campus City / State</th>
      <th>Campaign Name</th>
      <th>Work Order</th>
    </tr>
  </thead>
  <tbody>		
    <tr>  
      <td>1</td>
      <td>EL PASO UNIVERSITY</td>
      <td> EL PASO/TX</td>
      <td>Full Campaign</td>
      <td>#10055</td>
    </tr>
    <tr>
      <td>2</td>
      <td>DALLAS UNIVERSITY</td>
      <td> DALLAS/TX</td>
      <td>Mini Campaign</td>
      <td>#10056</td>
    </tr>
    <tr>
      <td>3</td>
      <td>MINNESOTA UNIVERSITY</td>
      <td> MINNEAPOLIS/MN</td>
      <td>Full Campaign</td>
      <td>#10059</td>
    </tr>
  </tbody>
</table>

关于javascript - jQuery 表格排序更改按列排序的颜色 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47340274/

相关文章:

javascript - 附加到一个不是数组的 JS 对象?

javascript - 如何将悬停效果添加到嵌套到悬停元素的元素?

javascript - 输入字段上的 Angular 条件只读/禁用

javascript - JavaScript 回调函数的参数

javascript - 如何使用 jQuery 在 &lt;input&gt; 元素内创建两个标签?

javascript - $.each() 中的记录顺序

javascript - 使用 Javascript 或 jQuery 从子节点获取父范围标题值

javascript - 如何在类名更改时再次执行js代码?

javascript - 选择性框架破坏 Javascript

html - 将 html 按钮放在 div 的顶部