2015-09-14 64 views
3

我有這個標記:排序jQuery的名單由兩個屬性

#a(data-row="2", data-col="3") a 
#b(data-row="1", data-col="1") b 
#c(data-row="1", data-col="3") c 
#d(data-row="2", data-col="2") d 
#e(data-row="1", data-col="2") e 
#f(data-row="2", data-col="1") f 

正如你所看到的,它定義元素的網格(3列和2行)。

我需要使用jQuery獲取這個項目列表,並按rowcol排序。

提供的標記的結果應該是:

b, e, c, f, d, a 

我能成功行責令但我不知道什麼是山坳命令他們的最好方式:

var gridElements = $('div'); 
gridElements.sort(function (a, b) { 
    var contentA =parseInt($(a).attr('data-row')); 
    var contentB =parseInt($(b).attr('data-row')); 
    return (contentA < contentB) ? -1 : (contentA > contentB) ? 1 : 0; 
}); 

CodePen:http://codepen.io/FezVrasta/pen/bVEezw

我想我應該過濾通過數據排列表,然後對每個組再次運行sort,但如何?

+0

'B,E,C,F,d,是了'最終預期的結果正確? – RRK

+0

是的,你看到的順序即使在codepen btw –

回答

3

第二個值僅applicible如果第一個值是相等的,所以這應該爲你做它:

var gridElements = $('div'); 
gridElements.sort(function (a, b) { 
    var contentA =parseInt($(a).attr('data-row')); 
    var contentB =parseInt($(b).attr('data-row')); 


    //check if the rows are equal 
    if (contentA === contentB) { 
    var colA = parseInt($(a).attr('data-col')); 
    var colB = parseInt($(b).attr('data-col')); 

    //do the same as your already doing but using different data, from above 
    return (colA < colB) ? -1 : (colA > colB) ? 1 : 0; 
    } 
    else { 
    return (contentA < contentB) ? -1 : (contentA > contentB) ? 1 : 0; 
    } 
}); 
+0

謝謝它的作品:) –