0

この問題には簡単な解決策があることは知っていますが、私はすでにかなり前からこれを解決しようとしており、あなたの助けが必要です。

私のコードでは、画面の幅に基づいて記事DIVを並べ替え、それらを行にラップし、必要に応じてダミーの記事を挿入しています。

ここで、4つの記事DIVと1つのダミーのjQueryセットがあるとします。次に、ダミーをさらに挿入する必要があるのか​​、それとも削除する必要があるのか​​を知る必要があります。行ごとの正しい数の記事が問題の関数に渡されます。たとえば、1行に2つの記事が必要だとします。

したがって、コードを実行する前のレイアウトは次のようになります。

| Article | Article |
| Article | Article |
|  Dummy  |  

...このようにする必要がある場合(冗長なダミーを削除):

| Article | Article |
| Article | Article |

これは私の現在のコードです:

var checkForDummies     = function ( unwrappedArticles, articlesPerRow ) {

        var $articles       = $( unwrappedArticles ),
            len             = $articles.length,
            i,
            dummiesFound    = $articles.filter( '.dummy-cell' ),
            dummiesNeeded   = (len - dummiesFound.length) % articlesPerRow,
            fragment        = document.createDocumentFragment(),
            div             = document.createElement( 'div' );

        // No dummies needed after removal    
        if      ( dummiesNeeded === 0 && dummiesFound.length )
            dummiesFound.remove();
        // No dummies needed nor found
        else if ( dummiesNeeded === 0 )
            return;
        // Dummies needed – remove redundant dummies ( max. dummies needed = dummiesNeeded )
        else if ( dummiesNeeded < dummiesFound.length )
            dummiesFound.splice( dummiesNeeded );
        // Dummies needed – create new ones
        else if ( dummiesNeeded > dummiesFound.length )
            // Left out to preserve space

    };

ただし、レイアウトが次のようになっている場合(1行あたり5つの記事)、このコードは機能しdummiesNeededませ14

| Article | Article | Article | Article | Article |
| Article |  Dummy  |

これに対する解決策を見つけるための助けは大歓迎です!ありがとう!

更新されたソリューション
マークされた回答の助けを借りて、必要dummiesNeededなダミーの符号付き整数を保持する新しい変数を変更して挿入する必要があり ました。

dummiesNeeded   = (articlesPerRow - (len - dummiesFound.length) % articlesPerRow) % articlesPerRow,
trueNeed        = dummiesNeeded - dummiesFound.length
4

2 に答える 2

2

私はあなたの問題がここにあると思います:

dummiesNeeded   = (len - dummiesFound.length) % articlesPerRow

あなたの例のように、1つの記事(so len = 1)と1つのダミー(so dummiesFound.length = 1)がある場合、1-1 = 0になるため、最終的には0になりますdummiesNeeded。0%5 = 0あなたが欲しかった4。

確かにあなたはするdummiesNeeded必要があります:

dummiesNeeded = (articlePerRow - (len - dummiesFound.length) % articlesPerRow) % articlesPerRow;
于 2013-02-19T15:03:31.127 に答える
1

問題は確かに (len - dummiesFound.length) % articlesPerRow

あなたが使用する必要がありますarticlesPerRow - ((len - dummiesFound.length) % articlesPerRow)

乾杯

于 2013-02-19T15:16:49.907 に答える