我有一个包含调度数据列的长表,我正在通过带有jQuery load()
的表单加载。我可以使用表数据访问这些html页面,并可以添加类/数据属性等。
我的表单有select
个字段,持续数小时和分钟(默认为当前时间),我正试图获得下一个最接近的时间加上之后的四个。
我的表格中的时间数据都格式化为<td>H:MM</td>
。
理想情况下,使用jQuery,我想知道除了那些时候我怎样才能删除所有内容的表数据。或者,因为我可以重新格式化这些数据,所以我会更容易以某种方式格式化它吗?
我尝试过的事情 - 我无疑是js的新手所以这些事情看起来很愚蠢:
select
字段然后创建每个字段的数组
列与所选时间进行比较。无法使这个工作
并且还产生了必须使用单个选择的问题
每一次。基本上寻找一些关于如何将这些工作简化或可能包括将所有html表复制为JSON格式的指导......
答案 0 :(得分:2)
也可以发布http://jsbin.com/ozebos/16/edit,虽然我被它击败了:)
基本操作模式类似于@nrabinowitz
data
row.data('time') >= chosen_time
.slice(0, 5)
已做出一些假设,因此此代码仅用作指向解决方案的指针。
答案 1 :(得分:1)
我认为这是一个有趣的问题,所以我在这里整理了一个jsFiddle:http://jsfiddle.net/nrabinowitz/T4ng8/
这里的基本步骤是:
提前解析时间数据并使用.data()
存储。为便于比较,我建议使用parseFloat(hh + '.' + mm)
将时间数据存储为浮点数。
在您的更改处理程序中,使用循环按顺序遍历单元格,当您找到time
值高于所选时间的单元格的索引时停止。递减指数,因为你走得太远了
在.toggle(i >= index && i < index+4)
循环中使用.each()
隐藏并显示相应的行。
答案 2 :(得分:0)
以下是如何在客户端进行此操作。这只是一个大纲,但应该给你一个想法。
// Create a sorted array of times from the table
var times = []
$('#mytable td').each(function(cell) {
times.push(cell.innerHTML);
});
times.sort();
// Those times are strings, and they can be compared, e.g. '16.30' > '12.30' returns true.
var currentTime = '12:30' // you probably need to read this from your select
var i = 0;
while (times[i] < currentTime || i=times.length) {
i++;
}
var closestTime = times[i];
var closestTimes = times.slice(i, i+4);
如果你想要的不是时间,而是实际上是包含时间的单元格,你可以这样找到它们:
$('#mytable td').each(function() {
if ($(this).text() in closestTimes) {
// do something to that cell
}
})