3

<div>Javascript を使用して、子要素によって s に分割されたテーブルを並べ替えています。コードは 1 つの方法で正常に並べ替えられていますが、昇順と降順で並べ替える機能を追加する必要があります。

どのテーブルヘッダーがクリックされているかを示すソート属性に呼び出し元を追加しようとしました。デフォルトで 1 に設定されているグローバル変数を設定してから、if ステートメントを使用して 1 と 2 の間で反転し、昇順または降順を示します。

テーブルは一度だけ昇順と降順で並べ替えられ、次のヘッダーを移動する前に他のテーブル ヘッダーを移動することに依存しているようです。

ここで問題の JSFiddle

 var OrderAuthor = 1;

function sortUsingNestedText(parent, childSelector, keySelector, caller)
{
        var items = parent.children(childSelector).sort(function(a, b)
        {
                var vA = $(keySelector, a).text();
                var vB = $(keySelector, b).text();
                if (caller.data('order_by') == 'author')
                {
                        if (OrderAuthor == 1)
                        {
                                OrderAuthor = 2;
                                OrderSubject = 1;
                                OrderDate = 1;
                                return (vA < vB) ? -1 : (vA > vB) ? 1 : 0;
                        }
                        else
                        {
                                OrderAuthor = 1;
                                return (vA > vB) ? -1 : (vA < vB) ? 1 : 0;
                        }
                }
        });
        parent.append(items);
}
4

1 に答える 1

3

私はこのようにしますhttp://jsfiddle.net/zdCT6/5/

var sortBy = ""
var asc = true

function sortUsingNestedText(parent, childSelector, keySelector) {
     if (sortBy == keySelector) { asc = !asc } else { asc = true }
     sortBy = keySelector
     var items = parent.children(childSelector).sort(function(a, b) {
        var vA = $.trim($(keySelector, a).text());
        var vB = $.trim($(keySelector, b).text());        
        return ((vA < vB) ? -1 : (vA > vB) ? 1 : 0) * (asc ? 1 : -1);           
    });

    parent.append(items);
 }

はるかに簡単で、毎回フラグをリセットする必要はありません。さらに、分岐する場合はかなり少なくなります。

また、trim() 呼び出しにも注意してください。あなたの text() は、そのアイテムを最初に自動的に移動する先行スペース chr を持つアイテムを返していました/

于 2013-03-22T09:03:46.387 に答える