jquery - Tinysort按多个属性排序(超过1个)

标签 jquery jquery-plugins jquery-mobile

我正在尝试使用tinysort作为我使用jquery mobile构建的移动应用程序的一部分。我的应用程序查找用户位置附近的地点,并且我希望能够快速对结果进行排序,而不必花时间重新查询数据库。

所以,我想做的是能够使用tinysort根据用户是否在该区域最喜欢的地方然后按距离重新排序结果,此外我希望能够按属性排序“benthere”如果用户标记他们去过某个地方。

这就是我想做的: 按最爱排序:

$("ul#places>li").tsort('',({order:"desc",attr:"myfav"},{order:"asc",attr:"dist"}));

按去过那里排序:

$("ul#places>li").tsort('',({order:"desc",attr:"beenthere"},{order:"asc",attr:"dist"}));

默认排序://这很简单,没有问题:

$("ul#places>li").tsort('',{order:"desc",attr:"dist"});

默认列表顺序如下:

<ul id="places">
  <li myfav="0" beenthere="0" dist=".02">Hot Dog Stand</li>
  <li myfav="1" beenthere="0" dist=".08">Joe's Shack</li>
  <li myfav="0" beenthere="1" dist=".10">Frick frack</li>
  <li myfav="1" beenthere="1" dist=".15">Mama's</li>
</ul>

按最爱排序应返回:

  1. 乔的小屋
  2. 妈妈的
  3. 热狗摊
  4. 弗里克裂缝

按去过那里排序应该返回:

  1. 弗里克裂缝
  2. 妈妈的
  3. 热狗摊
  4. 乔的小屋

然后返回按距离排序:

  1. 热狗摊
  2. 乔的小屋
  3. 弗里克裂缝
  4. 妈妈的

我对上面 tsort 的调用无法与多个属性选择器一起使用,要么我的语法错误,要么您无法根据多个条件进行排序。

任何关于如何使用 tsort 或其他解决方案完成此任务的想法都将受到赞赏!

最佳答案

我知道 Mottie 的解决方案有效,但似乎有点复杂......调用 tsort 两次对我来说有效:

listOfItems.tsort({data:sorter, order:direction})
            .tsort({data: sorterAlt, order:direction})

就您而言,它是(如果 '' 仅指所选项目,您可以删除它们):

$("ul#places>li").tsort({order:"desc",attr:"myfav"})
                  .tsort({order:"asc",attr:"dist"})
$("ul#places>li").tsort({order:"desc",attr:"beenthere"})
                  .tsort({order:"asc",attr:"dist"})

按照 Mottie 的建议,还可以使用 HTML5 的 data-attrname 样式。您始终可以在 tsort 中使用 data: attrname

希望它仍然可以帮助您或其他人!

关于jquery - Tinysort按多个属性排序(超过1个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7546232/

相关文章:

javascript - 扩展 jquery ui 小部件 - 如何访问父事件

jquery - JQuery Mobile面板-丢失了内容调用.trigger(“create”)

javascript - 在对话框按钮上使用 ui-disabled

javascript - 让我的 ajax 井井有条

javascript - if/else if/else如何简写?

jQuery 垂直悬停 Accordion

android - 带有导航栏的标题内右对齐的 div 中断到另一行

javascript - 如何将媒体规则动态添加到元素

javascript - 动态类: are they prepended or appended?

javascript - 使用 addRowData 添加行后的 jqGrid 寻呼机问题