查找所有li项

时间:2015-06-16 21:02:19

标签: javascript jquery html jquery-ui

我有一个使用Jquery UI Sortable的列表。每个列表项都有一个特殊的data-itemid值,这是一个唯一的数字。用户可以将项添加到此列表中,然后对其进行排序。我想找到data-itemid属性的最大值,无论它们在列表中的位置如何。

在我实现Sortable之前,我可以使用$('li:last-child').data('itemid')获取last-child的值,但在集成排序功能之后,最后一个子节点可能没有最大值。

我的代码如下:

HTML

<ul id='sortable'>
   <li data-itemid='1'>One</li>
   <li data-itemid='2'>Two</li>
</ul>

的Javascript

$(document).ready(function(){
  maxItemId = $('li:last-child').data('itemid');
  alert('Max Item Id is: ' + maxItemId);
});

我想我可以通过每个li项目并寻找具有最大Id的那个,我希望有更好的替代品。

2 个答案:

答案 0 :(得分:3)

这样的事情应该做的工作:

var max = 0;
$('#sortable li').each(function(){
    var val = $(this).data('itemid');
    if(val > max) max = val;
});
alert(max);

另一个想法是在修改后进行检查,如果最后一个元素更大,并且您的用户在列表和列表中添加了一个新元素,您可以检查这两个元素:

var max = $('li:last-child').prev().data('itemid');
var lastValue = $('li:last-child').data('itemid');
if(lastValue > max) max = lastValue;
alert(max);

但如果你没有大量的<li>来检查我建议第一个更安全,更容易。

希望这有帮助

答案 1 :(得分:2)

这会将数据属性放在一个数组中,该数组将传递给Math.max.apply

var max= Math.max.apply([], $('li[data-itemid]').map(function() {
  return $(this).data('itemid');
}).get());

Fiddle