1

私はこのコードを持っています:

<div id="main-container">
    <div class="comunicato-item">
        <div class="item item-1">Marco</div>
        <div class="item item-2">3</div>
        <div class="item item-2">2012</div>
    </div>

    <div class="comunicato-item">
        <div class="item item-1">Andrea</div>
        <div class="item item-2">2</div>
        <div class="item item-2">2013</div>
    </div>  

    <div class="comunicato-item">
        <div class="item item-1">Paul</div>
        <div class="item item-2">9</div>
        <div class="item item-2">2003</div>
    </div>  
</div>

comunicato-itemそして、(たとえば).item.item-2要素の値のためにアイテムを注文したいと思います。したがって、ソート後の結果は次のようになります。

<div id="main-container">
    <div class="comunicato-item row">
        <div class="item item-1">Andrea</div>
        <div class="item item-2">2</div>
        <div class="item item-2">2013</div>
    </div>  

    <div class="comunicato-item row">
        <div class="item item-1">Marco</div>
        <div class="item item-2">3</div>
        <div class="item item-2">2012</div>
    </div>

    <div class="comunicato-item row">
        <div class="item item-1">Paul</div>
        <div class="item item-2">9</div>
        <div class="item item-2">2003</div>
    </div>  
</div>

jqueryで可能ですか?このようなもので試してみました:

var a = [];
$(".comunicato-item .item.item-2").each(function(i,e){
    a.push(e);
});
$.each(a.sort(),function(i,e){
    $("#"+e).appendTo('#main-container');
});

しかし、失敗します!何か案が?

4

2 に答える 2

2

あなたは近くにいましたが、sortメソッドにはこのインスタンスの配列を評価する関数が必要です...

var a = [];

$(".comunicato-item").each(function() {
    a.push(this);
});

a.sort(function(x, y) {
    var xval = parseInt($(".item-2:first", x).text(), 10);
    var yval = parseInt($(".item-2:first", y).text(), 10);
    if (xval > yval) return 1;
    else if (xval < yval) return -1;
    else return 0;
});

$.each(a, function() {
    $(this).appendTo('#main-container');
});
于 2013-01-30T14:56:18.267 に答える
1

.sort関数を使用して、このようにコレクションを並べ替えることができます。jQueryはすでに要素を配列に格納しているため、ループして配列にプッシュする必要はありません。要素をループして追加する必要もありません

var x = $('#main-container > .comunicato-item').sort(function(a,b){
    var f = +$(a).find('.item-2:first').text();
    var s = +$(b).find('.item-2:first').text();
    return f-s; // no need for if/else because these are numbers
});
$('#main-container').html(x);
// or $('#main-container').append(x);
// or x.appendTo('#main-container');

http://jsfiddle.net/SuCyz/

編集

単語で並べ替える場合は、if/elseを使用する必要があります

var x = $('#comunicato-items > .comunicato-item').sort(function(a,b){
    var f = $(a).find('.item-2:first').text();
    var s = $(b).find('.item-2:first').text();
    return f > s ? 1 : f < s ? -1 : 0;   
});
$('#comunicato-items').html(x);

どこ

f > s ? 1 : f < s ? -1 : 0;  

に等しい

if(f > s){
   return 1;
}else if(f < s){
   return -1;
}else{
   return 0;
}

http://jsfiddle.net/u5Nxw/

于 2013-01-30T15:00:45.010 に答える