Javascript - 确定需要删除或添加的元素数量

时间:2013-02-19 14:56:25

标签: javascript jquery math dom

我知道这个问题有一个简单的解决方案,但我已经尝试解决这个问题很长一段时间了,需要你的帮助。

在我的代码中,我根据屏幕宽度重新排序我的文章DIV,并根据需要将它们包装成行并插入虚拟文章。

现在,假设我有一个jQuery集合的4篇文章DIV和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

    };

但是,当布局看起来像这样(每行5篇文章)时,此代码将不起作用 - 因为dummiesNeeded在某种程度上1而不是4

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

任何寻求解决方案的帮助表示赞赏!谢谢!

更新解决方案
在标记答案的帮助下,我需要修改dummiesNeeded并插入一个新变量,该变量包含所需的有符号整数的虚拟变量:

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

2 个答案:

答案 0 :(得分:2)

我认为你的问题在这里:

dummiesNeeded   = (len - dummiesFound.length) % articlesPerRow

如果在你的例子中,你有一篇文章(所以len = 1)和一个虚拟(所以dummiesFound.length = 1),那么1-1 = 0,所以你的dummiesNeeded最终为0 .0%5 = 0而不是你想要的4。

肯定你的dummiesNeeded应该是:

dummiesNeeded = (articlePerRow - (len - dummiesFound.length) % articlesPerRow) % articlesPerRow;

答案 1 :(得分:1)

确实存在问题 (len - dummiesFound.length) % articlesPerRow

你必须使用articlesPerRow - ((len - dummiesFound.length) % articlesPerRow)

干杯