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

Get next closest time from a table based on selected hours and minutes

本文关键字:获取 下一个 时间 最近 分钟 小时      更新时间:2023-09-26

我有一个长表与列的时间表数据,我通过jQuery load()加载表单。我可以访问这些html页面与表数据,可以添加类/数据属性等。

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

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

理想情况下使用jQuery,我想知道如何剥离表数据的一切,但那些时间。或者,既然我可以重新格式化这些数据,我是否会让我的生活更容易以某种方式格式化它?

我尝试过的事情 -我承认我是js的新手,所以这些事情可能看起来很愚蠢:

  • 读取每个单元格的第一个字符并将其与选定的小时。这显然是10 11 12和1的问题非常密集(这是一个移动站点)
  • 使用单个select字段,然后创建每个数组列,以便与所选时间进行比较。我没法让它工作这也造成了必须使用单个选择的问题每一次。

基本上寻找一个小指导如何得到这个工作短,或者可能包括,复制所有的html表到JSON格式…

不妨发布http://jsbin.com/ozebos/16/edit,虽然我被打败了:)

基本操作模式类似于@nrabinowitz

  1. 加载时,以某种方式解析时间字符串,并在每行上添加data
  2. 在过滤器上(即用户操作表单),选择的时间以相同的方式解析。在row.data('time') >= chosen_time
  3. 上过滤行
  4. 使用.slice(0, 5)
  5. 生成的元素数组限制为5(最近时间加上OP请求的4)
  6. 所有行被隐藏,这些行被显示。

已经做了一些假设,所以这段代码只能作为一个指向解决方案的指针。

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

基本步骤如下:

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

  2. 在更改处理程序中,使用循环按顺序遍历单元格,当发现单元格的索引的time值高于您选择的时间时停止。递减索引,因为您已经走多了一步

  3. .each()循环中使用.toggle(i >= index && i < index+4)来隐藏和显示适当的行。

如何在客户端做到这一点。这只是一个提纲,但应该给你一个想法。

// 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
  }
})