javascript - 使用 jQuery 对多个列表进行排序

标签 javascript jquery

我在一个页面上有多个列表。列表的示例如下所示:

<ul class="effects-list">
  <li data-sorte="2">creative</li>
  <li data-sorte="1">euphoric</li>
  <li data-sorte="2">uplifted</li>
  <li data-sorte="1">energetic</li>
  <li data-sorte="0">lazy</li>
  <li data-sorte="1">focused</li>
  <li data-sorte="2">happy</li>
  <li data-sorte="0">talkative</li>
  <li data-sorte="0">giggly</li>
  <li data-sorte="0">tingly</li>
  <li data-sorte="0">hungry</li>
  <li data-sorte="0">sleepy</li>
  <li data-sorte="0">aroused</li>
</ul>

我有一个脚本可以删除所有等于 0data-sorte。完成后,它将列表从最高到最低排序(同样按照 data-sorte 中存储的数字)。然后它采用前三个选项并删除其余选项。

这是执行此操作的脚本:

$('*[data-sorte="0"]').remove();
    $(".effects-list li").sort(sort_li_effects).appendTo('.effects-list');
function sort_li_effects(a, b){
    return ($(a).data('sorte')) < ($(b).data('sorte')) ? 1 : -1;    
}
$(".effects-list li").filter( function(k, v) {
    if( k < 3 ) {
        min = parseInt($(v).data('sorte'));
        return false;
    } else
        return min > parseInt($(v).data('sorte'));
}).remove();

我遇到的问题是它根据第一个列表对所有列表进行排序。我的问题是如何修改脚本以正确排序页面上的所有列表?

Here is a jsFiddle使用显示问题的工作代码。

编辑

澄清一点。假设我有以下列表:

<ul class="effects-list">
  <li data-sorte="2">creative</li>
  <li data-sorte="1">euphoric</li>
  <li data-sorte="2">uplifted</li>
  <li data-sorte="1">energetic</li>
  <li data-sorte="0">lazy</li>
  <li data-sorte="1">focused</li>
  <li data-sorte="1">happy</li>
  <li data-sorte="0">talkative</li>
  <li data-sorte="0">giggly</li>
  <li data-sorte="0">tingly</li>
  <li data-sorte="0">hungry</li>
  <li data-sorte="0">sleepy</li>
  <li data-sorte="0">aroused</li>
</ul>

我希望它表现出创意振奋欣快精力充沛专注happy,因为它们是数量最多的选项。 euphoricenergeticfocusedhappy 都与 1 相关,因此我想要向他们展示。原始脚本执行此操作。

最佳答案

我稍微修改了你的脚本。

$('*[data-sorte="0"]').remove();
$(".effects-list").each(function() {
    var $list = $(this),
        $items = $list.find('li'),
        sortes = [];

    $items.detach().sort(sort_li_effects).filter(function(i) {
        var sorte = $(this).data('sorte');
        if (i < 3) {
            sortes.push(sorte);
            return true;
        }

        return sortes.indexOf(sorte) >= 0;
    }).appendTo($list);
});

function sort_li_effects(a, b) {
    return ($(a).data('sorte')) < ($(b).data('sorte')) ? 1 : -1;
}

http://jsfiddle.net/KK2bV/5/http://jsfiddle.net/KK2bV/6/http://jsfiddle.net/KK2bV/3/

主要区别:

  • 它在每个 list 中遍历 li 并正确排序
  • 它使用 li:gt(2)
  • 一次删除所有不需要的项目

关于javascript - 使用 jQuery 对多个列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24357603/

相关文章:

javascript - 如何将工具提示图像添加到多个按钮

javascript - jQuery attr 在 aspx 上替换

javascript - 动态否定外部脚本

jquery - 如何在支持触摸的设备中激活带有触摸的悬停链接?

javascript - 如何使用gulp连接JS库文件?

javascript - 如何将字符串保存到 p5.js 中的特定位置

javascript - Graphql - 从生成的 JSON 文件创建模式

asp.net - 使用ajax实现搜索和搜索结果的好方法有哪些?

javascript - 在 underscore.js 中通过对象键查找

javascript - .on ("hover", ...) 链接不起作用