【问题标题】:Jquery Mobile Duplicating AutodividersJquery Mobile 复制自动分割器
【发布时间】:2013-10-06 02:10:34
【问题描述】:

我有一个列表,但是当我尝试为该列表生成自动分隔符时,我得到了重复的分隔符。这是 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。

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

谢谢。

【问题讨论】:

  • 您需要先对它们进行排序,然后再应用自动分隔符。
  • 但是我该怎么做呢?

标签: javascript html listview jquery-mobile


【解决方案1】:

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

我使用了下面的简单代码,但很天才,由@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);

第二步,动态应用自动分频器。

$("#ScheduleList").listview({
  autodividers: true,
  autodividersSelector: function (li) {
    var out = li.jqmData('time');
    return out;
  }
}).listview('refresh');

Demo

感谢@undefined@Keir Lavelle

【讨论】:

  • return (adata > bdata) 行中嵌套三元语句的目的是什么? (adata > bdata) ? 1:0:-1;
  • @keirlavelle 它用于在应用自动分隔符之前对li 元素进行排序。请检查我帖子中的链接以获取有关此代码块的更多详细信息。
  • 那行不是只会返回 1 或 -1 吗?我只是对为什么你比较 adata > bdata 两次感到困惑?
  • @keirlavelle 我从另一个答案中得到了该代码。我不擅长JS。你有更好的解决方案吗?我很乐意用它来更新我的答案:)
  • 绝对不是一个更好的解决方案,我赞成你的答案,因为我自己用过它:) 但是返回行比较 adata > bdata 两次,如果第一个比较为真,那么第二,所以你可以删除第二个三元语句并让它读取 return (adata > bdata) ? 1:-1; - 为您节省几个字节的数据:p
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2017-08-28
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
  • 2014-08-26
  • 2011-08-28
相关资源
最近更新 更多