use*_*357 3 html javascript listview jquery-mobile
我有一个列表但是当我尝试为该列表生成自动分离器时,我得到了重复的分隔符.这是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>
Run Code Online (Sandbox Code Playgroud)
这是JSFiddle中的代码:http://jsfiddle.net/4fGT6/65/
我知道我可以重新排序html中的列表项,这将消除重复的自动分割器,但如果我使列表从用户输入动态生成,那么我无法手动重新排序html.
如果列表是动态生成的,有没有办法解决这个问题?
谢谢.
第一步,根据data-time属性对列表项进行排序(我添加了数据以方便读取值 - 用户代理忽略了数据属性,因此不会弄乱你的代码).
我使用了以下简单的代码,但天才,由@undefined制作.
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);
Run Code Online (Sandbox Code Playgroud)
第二步,动态应用autidividers.
$("#ScheduleList").listview({
autodividers: true,
autodividersSelector: function (li) {
var out = li.jqmData('time');
return out;
}
}).listview('refresh');
Run Code Online (Sandbox Code Playgroud)