我正在尝试使用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>
按最爱排序应返回:
- 乔的小屋
- 妈妈的
- 热狗摊
- 弗里克裂缝
按去过那里排序应该返回:
- 弗里克裂缝
- 妈妈的
- 热狗摊
- 乔的小屋
然后返回按距离排序:
- 热狗摊
- 乔的小屋
- 弗里克裂缝
- 妈妈的
我对上面 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/