2017-03-04 64 views
0

不幸的是,我無法自己解決這個問題。我有一個列表與幾個總是有相同的ID和類的DIV。我根據「數據排序」屬性對列表進行排序,它的功能非常好。JQuery複雜的類和ID排序

目前,它看起來像這樣:

<div id="divList"> 

<div id="hsdf" data-sort="1"></div> 
<div class="hsdf" data-sort="1"></div> 

<div class="vasfd" data-sort="2"></div> 
<div id="vasfd" data-sort="2"></div> 

<div id="asdfas" data-sort="3"></div> 
<div class="asdfas" data-sort="3"></div> 

</div> 

我卻想在列表中排序第一的類,然後在ID來。喜歡這裏:

<div id="divList"> 

<div class="hsdf" data-sort="1"></div> 
<div id="hsdf" data-sort="1"></div> 

<div class="vasfd" data-sort="2"></div> 
<div id="vasfd" data-sort="2"></div> 

<div class="asdfas" data-sort="3"></div> 
<div id="asdfas" data-sort="3"></div> 

</div> 

「數據排序」屬性排序與jQuery的完成:

​​

你對我有什麼想法?

回答

1

您可以在sort功能使用:

return jQuery(a).attr('data-sort') - jQuery(b).attr('data-sort') 
    || !!jQuery(a).attr("id") - !!jQuery(a).attr("class"); 

此檢查的id的存在,併爲class。如果類存在,||後表達式將evalutate到-1,如果ID存在,它將evalutate到1。這將是相關的,如果之前||表達評估爲0(當它們具有相同的data-sort值)。

+1

由於沒有太多的SQL,所以它的工作。 「B」 而不是 「A」 '返回jQuery的(a)中.attr( '數據排序') - jQuery的(b)中.attr( '數據排序') || !jQuery(b).attr('id') - !jQuery(b).attr('class');' –

+0

@od_這些是等價的。排序功能比較'a'和'b'。我的方法首先對'a'進行排序,如果它有一個類,那麼您的方法會將'b'排序,如果它有一個ID。在這種情況下,它是一樣的。 – Xufox

1

像這樣的東西應該工作:

jQuery('#divList').find('div').sort(function (a, b) { 
    var diff = jQuery(a).attr('data-sort') - jQuery(b).attr('data-sort'); 
    if (diff == 0) { 
     if (jQuery(a).attr('class') && jQuery(a).attr('class') != '') { 
      diff = -1; 
     } else { 
      diff = 1; 
     } 
    } 
    return diff; 
}).appendTo('#divList'); 
+0

@Xufox謝謝,固定它,今天 – mahieus