我有一个使用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的那个,我希望有更好的替代品。
答案 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());