找到大于日期值的数据属性的第一个列表项目



我有一个具有以" yy/mm/dd 00:00"的日期数据属性的项目列表

我将在该列表中添加列表项目,但我需要在排队中找到其正确的位置。因此,如果我有一个带有日期值的项目" 2012/04/22 21:30",那么我需要找到一个大于该列表值的第一个列表项目,然后在列表项目之前进行预处。

所以我将有我的列表项目

<li data-date="2010/04/05 20:40"></li>
<li data-date="2011/06/05 21:40"></li>
<li data-date="2012/08/05 22:40"></li>
<li data-date="2013/10/05"></li>

,然后我需要插入上面的列表

<li data-date="2012/04/22 21:30"></li>

如何用jQuery解决此问题?

您需要比较要插入的新 li的属性 data-date与dom中已经存在的列表项目。

$(function() {
  var c = 0;
  var a = '<li data-date="2011/06/05 21:40">2011/06/05 21:40</li>';
  var aa = Date.parse($(a).attr('data-date'));
  $('li').each(function(i, v) {
    var aaa = ($(v).attr('data-date'));
    var b = Date.parse(aaa);
    if (b > aa) {
      $(a).insertBefore(v);
      c = 1;
      return false;
    }
  })
  if (!c) {
    $('ul').append(a);
  }
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li data-date="2010/04/05 20:40">2010/04/05 20:40</li>
  <li data-date="2012/08/05 22:40">2012/08/05 22:40</li>
  <li data-date="2013/10/05 22:40">2013/10/05 22:40</li>
</ul>

我认为您应该以这种方式处理要求,

  1. 调用所有节点,获取其值并存储在数组中。然后将所有日期时间值转换为秒。
  2. 根据您的要求,按ASC/DESC订单重新安排它们。
  3. 再次将值转换为原始格式,封装使用<li></li>标签和其他属性的值。
  4. 用较旧的
  5. 替换新生成的HTML。

我不确定这是这样做的最佳方法,但这是一个有效的解决方案。

最新更新