2

これが私がこれまでに取り組んできたものに対するJSFiddleです:http://jsfiddle.net/FmBFt/1/の問題は、私が望むことをするためにデモコードを適応させることです。Isotopeのドキュメントは、私のようなnoobコーダーにはあまり役立ちません。

私が必要なものを説明するために

私はISOTOPEを使用しており、6つのカテゴリがあります。各カテゴリには、任意の数のボックスが含まれます。したがって、ライラックカテゴリには3つのボックスがあり、グリーンカテゴリには8つのボックスがあります。各カテゴリへのリンクのリストがあります。カテゴリ名をクリックすると(例:ライラックカテゴリ)、ライラックの上部の境界線が付いたすべてのボックスをクラス名「l」で並べ替えて、上部に移動する必要があります。次に、これらのライラックボックスを、追加された日付の順に並べ替えて、最新のボックスが最初に表示されるようにします。その並べ替え機能をすべてのカテゴリに適用したいのですが、実際にはその方法がわかりません。

「date-category」で並べ替えることができることに気づきましたが、すべてのカテゴリをグループ化するだけで、必要なように特定のカテゴリを一番上に移動することはできません。

http://jsfiddle.net/FmBFt/1/を自分のやりたいことをするように適応させる方法がわかりません。誰か助けてもらえますか?

編集:これまでのところ、私を混乱させた答えが1つありますが、私の問題はJS内のgetSortData関数にあると確信しています。

    getSortData : {
      blogs : function( $elem ) {
        return $elem.find('.blogs');
      },
      symbol : function( $elem ) {
        return $elem.attr('data-symbol');
      },
      category : function( $elem ) {
        return $elem.attr('data-category');
      },
      number : function( $elem ) {
        return parseInt( $elem.find('.number').text(), 10 );
      },
      weight : function( $elem ) {
        return parseFloat( $elem.find('.weight').text().replace( /[\(\)]/g, '') );
      },
      name : function ( $elem ) {
        return $elem.find('.name').text();
      }
    }

上記のコードのカテゴリ呼び出しはそれができるように見えますが、調整する方法を見つける必要があります。現時点では、すべてのカテゴリをグループ化するだけですが、一度に1つずつグループ化する必要があります...誰か?

4

2 に答える 2

1

この正確な問題の解決策を探している間、私は他の答えを見ていました。私の場合、ゲーム タイトルのプラットフォームで並べ替えます。彼は信じられないほど技術的で深く掘り下げており、あなたがどのように道に迷ったかがわかります。

これは、私が使用した getSortData の 1 つの要素です。

flash : function ( $elem ) {
    if ($elem.find('.platform').text() == "Flash") {
        return $elem.find('.modes').text();
    } else {
        return "Z";
    }
}

私がここで行っているのは、そうでなければ単に返す値が私が望むものであるかどうかを確認することです。"閃光"。そうであれば、それは完全に問題なく返されます。また、値 0 を指定することもできます。それ以外の場合は、必要な値よりも値 'MORE' を返します。

したがって、私の場合、最初の値は Flash で、他のすべての値は Z に設定されています。必要に応じて、複数のチェックを行うこともできます。複数のものを上に並べるには「if elseif elseif」。

お役に立てれば。

于 2012-11-09T21:28:16.997 に答える
-1

ここには 2 つの異なる部分が含まれます。まず、ソート自体があります。それは同位体によって処理され、あなたのビジネスには関係ありません。必要なのは 2 番目の部分、つまりコンパレーターです。

コンパレータは、ソートの「キー」を返す、ユーザーが定義した関数です。同位体はすべてのキーを比較し、自然な方法で並べ替えます (テキストは ascii:で並べ替えられます)。'1', '10', '100', '11', '2'数値は値で並べ替えられます ( 1, 2, 10, 11, 100)。

これgetSortData()は、アイソトープがキーを作成するために使用できるいくつかの関数を返します。並べ替えるときは、使用する関数を指定する必要があります。を指定するfooと、アイソトープはgetSortData().foo(x)各ノードがソートされるように呼び出し、 は各ノードにx置き換えられます。

このキー リストを作成した後、isotope はキー (およびこの情報を使用してノード自体) を並べ替えます。

したがって、優れたキージェネレーターに必要なもの. 私の提案は、日付をミリ秒に変換し、その数値を文字列に変換し、これを 0 で左に埋め込むことです。左のパディングについては、この回答を参照してください: How can I pad a value with先行ゼロ?

次に、クラスが「l」の場合はこの文字列の先頭に「1」を追加し、それ以外の場合は「0」を追加します。

return (cls == 'l' ? '0' : '1') + zeroFill( dateInMillis, 16 );

これにより、最初に正しいクラス (「0」は「1」より小さい) でボックスが並べ替えられ、次に各タイプのボックスが日付で並べ替えられます。

または、間違ったクラスの各ボックスに同じキーを与えることができます (順序が変わらないようにします)。

return (cls == 'l' ? zeroFill( dateInMillis, 16 ) : 'xxx');
于 2012-03-12T11:46:52.987 に答える