这是我的code:
<div id="fascia-filtri-etichette">
<div data-title="m" data-preorder="order-2" class="item">m</div>
<div data-title="2013" data-preorder="order-3" class="item">2013</div>
<div data-title="2012" data-preorder="order-3" class="item">2012</div>
<div data-preorder="order-4" id="fascia-filtri-etichette-cancella">DELETE</div>
<div data-title="E" data-preorder="order-1" class="item">E</div>
<div data-title="S" data-preorder="order-1" class="item">S</div>
<div data-title="2014" data-preorder="order-3" class="item">2014</div>
</div>
<script>
var items = $("#fascia-filtri-etichette" + ' > div');
items.sort(function (a, b) {
return a.getAttribute('data-title') > b.getAttribute('data-title') || a.getAttribute('data-preorder') > b.getAttribute('data-preorder');
}).detach().appendTo($("#fascia-filtri-etichette"));
</script>
我想首先为pre-order
字段订购(升序)div,而不是(因此对于每个前一个块)订购标题。
结果应为:
E // order 1
S // order 1
m // order 2
2012 // order 3
2013 // order 3
2014 // order 3
DELETE // order 4
我哪里错了?
答案 0 :(得分:3)
你的错误是
它看起来应该是这样的
items.sort(function (a, b) {
var po = a.getAttribute('data-preorder').localeCompare(b.getAttribute('data-preorder'));
if(po != 0) return po;
return a.getAttribute('data-title').localeCompare( b.getAttribute('data-title'));
});
首先它应该去检查预订,然后才比较标题。这是工作示例http://jsfiddle.net/rczjm4ph/
答案 1 :(得分:1)
使用2种排序功能而不是1种。测试用例http://jsfiddle.net/a47xv32f/
var items = $("#fascia-filtri-etichette" + ' > div');
items.sort(function (a, b) {
return a.getAttribute('data-title') > b.getAttribute('data-title');
}).sort(function (a, b) {
return a.getAttribute('data-preorder') > b.getAttribute('data-preorder');
}).detach().appendTo($("#fascia-filtri-etichette"));
答案 2 :(得分:1)
仍然可以使用单个sort()
:
var items = $("#fascia-filtri-etichette" + ' > div');
items.sort(function (a, b) {
var cmpOrder = a.getAttribute('data-preorder').localeCompare(b.getAttribute('data-preorder'));
if (cmpOrder !== 0) return cmpOrder;
return a.getAttribute('data-title').localeCompare(b.getAttribute('data-title'));
});
答案 3 :(得分:0)
制作一个首先查看预订的比较函数,然后是预订相等的项目的标题:
items.sort(function (a, b) {
var aPre = a.getAttribute('data-preorder');
var bPre = b.getAttribute('data-preorder');
if (aPre == bPre) {
return a.getAttribute('data-title') > b.getAttribute('data-title') ? 1 : -1;
} else {
return aPre > bPre ? 1 : -1;
}
}).detach().appendTo($("#fascia-filtri-etichette"));