2017-03-04 16 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をチェック。クラスが存在する場合、||の後の式は-1にevalutateし、IDが存在する場合は1と評価されます。これは、の前に||の式が0と等しい(data-sortの値を持つ場合)と評価される場合に関係します。

+1

@ Xufoxさん、ありがとう、それは働いた。 "A"の代わりに "B" 'return jQuery(a).attr( 'data-sort') - jQuery(b).attr( 'data-sort') || !jQuery(b).attr( 'id') - !jQuery(b).attr( 'class'); ' –

+0

@od_これは同等です。ソート関数は 'a'と' b'を比較します。私のアプローチは 'a'を最初にソートします。クラスがあれば、IDがあれば最後に' b'をソートします。このシナリオでは、同じです。 – 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

関連する問題