首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同UL中的度假村LIs

不同UL中的度假村LIs
EN

Stack Overflow用户
提问于 2013-09-30 23:59:29
回答 2查看 51关注 0票数 0

我一直在绞尽脑汁解决这个问题,但还是想不出解决方案。基本上,我有几组UL,并希望在相同的结构中重新排序所有的LI:

代码语言:javascript
复制
<ul>
   <li><span data-sort="-1">-1</span></li>
   <li><span data-sort="10">10</span></li>
</ul>
<ul>
   <li><span data-sort="4">4</span></li>
   <li><span data-sort="7">7</span></li>
</ul>
<ul>
   <li><span data-sort="5">5</span></li>
</ul>

我想要像这样返回:

代码语言:javascript
复制
<ul>
   <li><span data-sort="-1">-1</span></li>
   <li><span data-sort="4">4</span></li>
</ul>
<ul>
   <li><span data-sort="5">5</span></li>
   <li><span data-sort="7">7</span></li>
</ul>
<ul>
   <li><span data-sort="10">10</span></li>
</ul>

任何帮助都会提前表示感谢。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2013-10-01 00:07:56

如下所示:

代码语言:javascript
复制
var uls = $('ul'),
    lis = $('>li', uls);
    ul  = uls.empty().first(),

lis.sort(function(a,b) {
    return parseInt($(a).text(),10) > parseInt($(b).text(), 10);
}).each(function(_,li) {
    ul = ul.find('li').length > 1 ? ul.next() : ul;
    ul.append(li)
});
票数 1
EN

Stack Overflow用户

发布于 2013-10-01 00:21:22

我使用了一种稍微不同的方法。

我猜您想要比较排序数据属性,所以我创建了一个排序函数来比较它们的值。然后写出一些自定义的html并每隔两个LI's中断列表,这可以在顶部进行调整。

代码语言:javascript
复制
function sortMe(a, b) {
    return ($(a).find('span').data("sort") - $(b).find('span').data("sort"));
}

$li.sort(sortMe).each(function (i, el) {
    //every two start a new list
    if (n == numberInEach) {
        str += "</ul><ul>";
        n = 0;
    }
    str += $(el).html();
    n++;
});

Fiddle here

您可以进行一些性能增强,例如将数据属性向上移动到列表本身,而不是注入完整的元素,您可以只创建内容的数组等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19098682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档