我有一个列表但是当我尝试为该列表生成自动分离器时,我会得到重复的分隔符。以下是ul的代码和相关脚本:
<div data-role="content">
<ul data-role="listview" id="ScheduleList" data-autodividers="true">
<li time="3:30PM"><a href="#">Event 1</a></li>
<li time="3:30PM"><a href="#">Event 2</a></li>
<li time="4:30PM"><a href="#">Event 3</a></li>
<li time="3:30PM"><a href="#">Event 4</a></li>
<li time="3:30PM"><a href="#">Event 5</a></li>
<li time="4:30PM"><a href="#">Event 6</a></li>
</ul>
</div>
</div>
<script>
$(document).on("pageinit", "#ScheduleDay", function(){
$("#ScheduleList").listview({
autodividers: true,
autodividersSelector: function (li) {
var out = li.attr('time');
return out;
}
}).listview('refresh');
});
</script>
这是JSFiddle中的代码:http://jsfiddle.net/4fGT6/65/
我知道我可以对html中的列表项重新排序,这将消除重复的自动分割器,但如果我使用户输入动态生成列表,那么我无法手动重新排序html。
如果列表是动态生成的,有没有办法解决这个问题?
感谢。
答案 0 :(得分:5)
第一步,根据data-time
属性对列表项进行排序(我添加数据以便于读取值 - 数据属性被用户代理忽略,因此它不会弄乱你的代码。)
我使用了以下简单的代码,但天才,由@undefined制作。
感谢@Keir Lavelle reviewing对li
元素进行排序的代码。
var listview = $('#ScheduleList'),
listitems = listview.children('li');
listitems.detach().sort(function (a, b) {
var adata = $(a).data('time');
var bdata = $(b).data('time');
/* return (adata > bdata) ? (adata > bdata) ? 1 : 0 : -1; */
return (adata > bdata) ? 1 : -1;
});
listview.append(listitems);
第二步,动态应用autodividers。
$("#ScheduleList").listview({
autodividers: true,
autodividersSelector: function (li) {
var out = li.jqmData('time');
return out;
}
}).listview('refresh');
的积分<强> Demo 强>