如何用jQuery通过列ID修改排除前两列的指定列背景色?
使用jQuery修改指定列范围背景色(排除前两列)
首先得指出你现有代码里的几个小问题:
- 你用了
slice(fromtime,totime),但slice是按DOM元素的索引位置来截取的,而你的fromtime和totime是列ID,不是索引,所以这步根本选不到你想要的列; - 你重复写了两次
.not('td:eq(0)'),这只能排除第一列,要排除前两列得同时处理索引0和1的元素。
接下来给你两种可行的实现思路,根据你的列ID格式选就行:
假设列ID是纯数字(比如<td id="3">...</td>)
var fromtime = obj[i].FromTime; // 比如值是"3"或数字3 var totime = obj[i].totime; // 比如值是"6"或数字6 var $rowTds = $(row1).children('td'); // 先筛选ID在指定区间的列,再排除前两列 $rowTds.filter(function() { // 把当前td的ID转成数字,和范围值比较 var tdId = parseInt(this.id, 10); return tdId >= fromtime && tdId <= totime; }).not(':eq(0), :eq(1)').css('background-color', '#f0f8ff'); // 替换成你要的颜色
如果列ID带前缀(比如<td id="col-3">...</td>)
只需要修改filter里提取ID的逻辑就行:
var fromtime = obj[i].FromTime; var totime = obj[i].totime; var $rowTds = $(row1).children('td'); $rowTds.filter(function() { // 先去掉前缀,再转成数字比较 var tdId = parseInt(this.id.replace('col-', ''), 10); return tdId >= fromtime && tdId <= totime; }).not(':lt(2)').css('background-color', '#f0f8ff');
更简洁的写法(先排除前两列再筛选ID)
如果想逻辑更清晰,可以先把前两列排除掉,再在剩下的列里筛选ID范围:
var fromtime = obj[i].FromTime; var totime = obj[i].totime; $(row1).children('td:not(:lt(2))').filter(function() { var tdId = parseInt(this.id, 10); return tdId >= fromtime && tdId <= totime; }).css('background-color', '#f0f8ff');
这里的:lt(2)是jQuery的选择器,意思是“索引小于2的元素”,也就是前两列,用它比写两个:eq()更简洁。
内容的提问来源于stack exchange,提问作者Jack Sparrow
相关产品推荐
相关产品推荐

