根据选定的小时和分钟从表格中获取下一个最近的时间

时间:2011-11-30 23:33:46

标签: javascript jquery html time html-table

我有一个包含调度数据列的长表,我正在通过带有jQuery load()的表单加载。我可以使用表数据访问这些html页面,并可以添加类/数据属性等。

我的表单有select个字段,持续数小时和分钟(默认为当前时间),我正试图获得下一个最接近的时间加上之后的四个。

我的表格中的时间数据都格式化为<td>H:MM</td>

理想情况下,使用jQuery,我想知道除了那些时候我怎样才能删除所有内容的表数据。或者,因为我可以重新格式化这些数据,所以我会更容易以某种方式格式化它吗?

我尝试过的事情 - 我无疑是js的新手所以这些事情看起来很愚蠢:

  • 读取每个单元格的第一个字符并将其与之比较 选定的小时。这显然是10,11,12的问题而且是 非常密集(这是一个移动网站)
  • 使用单个时间select字段然后创建每个字段的数组 列与所选时间进行比较。无法使这个工作 并且还产生了必须使用单个选择的问题 每一次。

基本上寻找一些关于如何将这些工作简化或可能包括将所有html表复制为JSON格式的指导......

3 个答案:

答案 0 :(得分:2)

也可以发布http://jsbin.com/ozebos/16/edit,虽然我被它击败了:)

基本操作模式类似于@nrabinowitz

  1. 在加载时,以某种方式解析时间字符串并在每行上添加data
  2. 在过滤器(即用户操作表单)上,以相同的方式解析所选时间。这些行将在row.data('time') >= chosen_time
  3. 上进行过滤
  4. 使用.slice(0, 5)
  5. 生成的元素数组限制为5(最近时间加上4请求OP)
  6. 隐藏所有行,显示这些行。
  7. 已做出一些假设,因此此代码仅用作指向解决方案的指针。

答案 1 :(得分:1)

我认为这是一个有趣的问题,所以我在这里整理了一个jsFiddle:http://jsfiddle.net/nrabinowitz/T4ng8/

这里的基本步骤是:

  1. 提前解析时间数据并使用.data()存储。为便于比较,我建议使用parseFloat(hh + '.' + mm)将时间数据存储为浮点数。

  2. 在您的更改处理程序中,使用循环按顺序遍历单元格,当您找到time值高于所选时间的单元格的索引时停止。递减指数,因为你走得太远了

  3. .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
  }
})