Jquery Mobile Duplicating Autodividers

时间:2013-10-06 02:10:34

标签: javascript html 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>

这是JSFiddle中的代码:http://jsfiddle.net/4fGT6/65/

我知道我可以对html中的列表项重新排序,这将消除重复的自动分割器,但如果我使用户输入动态生成列表,那么我无法手动重新排序html。

如果列表是动态生成的,有没有办法解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:5)

第一步,根据data-time属性对列表项进行排序(我添加数据以便于读取值 - 数据属性被用户代理忽略,因此它不会弄乱你的代码。)

我使用了以下简单的代码,但天才,由@undefined制作。

更新

感谢@Keir Lavelle reviewingli元素进行排序的代码。

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

@undefined@Keir Lavelle

的积分