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

时间:2017-04-22 19:19:18

标签: jquery custom-data-attribute

我有一个项目列表,其日期数据的格式为" 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解决此问题?

2 个答案:

答案 0 :(得分:1)

您需要将要插入的新data-date的属性li与已存在于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 :(得分:0)

我认为你应该以这种方式达到要求,

  1. 调用所有节点,获取其值并存储在数组中。然后 将所有日期时间值转换为秒。
  2. 根据您的要求,按照ASC / DESC顺序重新安排。
  3. 再次将值转换为原始格式,封装 带有<li></li>标记和其他属性的值。
  4. 将新生成的HTML替换为较旧的HTML。
  5. 我不确定这是否是最佳方法,但这是一个有效的解决方案。