2013-01-04 17 views
41

属性が複数の要素を持っています:data-percentage、要素を昇順に並べ替える方法がありますか?データ属性の数値で要素を並べ替えます

HTML:

<div class="testWrapper"> 
    <div class="test" data-percentage="30"> 
    <div class="test" data-percentage="62"> 
    <div class="test" data-percentage="11"> 
    <div class="test" data-percentage="43"> 
    </div> 

望ましい結果: HTML:Javascriptのか、jQueryのいずれかを使用して

<div class="testWrapper"> 
    <div class="test" data-percentage="11"> 
    <div class="test" data-percentage="30"> 
    <div class="test" data-percentage="43"> 
    <div class="test" data-percentage="62"> 
    </div> 

?あなたはdatasetプロパティを使用することはできませんIE < 10を、使用している場合http://jsfiddle.net/UdvDD/


+0

あなたがそれらのdivの周りにラッピングdiv要素を持っていますか? – sp00m

+0

はい、あります - 質問を反映するように更新しました。 – JayDee

答えて

98

使用Array.sort

var $wrapper = $('.testWrapper'); 

$wrapper.find('.test').sort(function(a, b) { 
    return +a.dataset.percentage - +b.dataset.percentage; 
}) 
.appendTo($wrapper); 

はここでフィドルです。代わりにgetAttributeを使用してください:

var $wrapper = $('.testWrapper'); 

$wrapper.find('.test').sort(function(a, b) { 
    return +a.getAttribute('data-percentage') - +b.getAttribute('data-percentage'); 
}) 
.appendTo($wrapper); 

はここでフィドルだ:私はTinysort jQueryプラグインはオプションであるべきだと思うhttp://jsfiddle.net/UdvDD/1/

+1

'-'は両方のオペランドを数値に変換するので、ここで単項プラスを使う必要はありません。それは物事をはっきりさせる。 –

+7

@FelixKling - 暗黙のキャストが嫌いです。私が数学をしているなら、私は直接数を扱うのが好きです。 –

+0

jQuery.dataはあなたの友だちです –

1

、あなたは私がここでそれを得ることができます:http://tinysort.sjeiti.com/

を、私はそれを試していなかったが、コードは次のようになります。

$("#test > div").tsort("",{attr:"data-percentage"}); 

が、これは

を助けることを願っています
+1

最初の空文字列引数は必要ありません。オブジェクトを唯一の引数として渡すだけです。 –

5
$('.testWrapper').find('.test').sort(function (a, b) { 
    return $(a).attr('data-percentage') - $(b).attr('data-percentage'); 
}) 
.appendTo('.testWrapper'); 
+0

Gilber divに「データパーセンテージ」がない場合、私は最後の場所に行きたいと思うのですが、これは可能でしょうか?ありがとう。 – diank

0

より強力なオプションで、複数のオプションに基づいて要素を並べ替えることができます。

https://jsfiddle.net/L3rv3y7a/1/

// This calls the function 
DOYPSort('#wrapper', '.element', value, order); 

    // Parameters must be strings 
    // Order of must be either 'H' (Highest) or 'L' (Lowest) 
    function DOYPSort(wrapper, elementtosort, AttrToSort, orderof) { 
     $(wrapper).find(elementtosort).sort(function (a, b) { 
      if (orderof === 'H') { 
       return +b.getAttribute(AttrToSort) - +a.getAttribute(AttrToSort); 
      } 
      if (orderof === 'L') { 
       return +a.getAttribute(AttrToSort) - +b.getAttribute(AttrToSort); 
      } 
     }).appendTo(wrapper); 
    } 
関連する問題