1

我有一系列分配.big.small基于大小的 DIV。它们需要以两个或三个为一组进行包装。实际上,只有两个.bigs 可以放入分配的空间中。

如果两个.bigDIV 相邻存在,则应将它们以两个一组的形式包装。否则,DIV 应该以三个为一组进行包装。

请让我知道我做错了什么以及如何使它工作。下面是一个示例,其中包含关于应在何处断开换行的注释。下面是我在 jQuery 中尝试过的内容,以及jsFiddle 的链接

<div class="big post">big</div>
<div class="big post">big</div>
    <!-- should be wrap break -->
<div class="big post">big</div>
<div class="big post">big</div>
    <!-- should be wrap break -->
<div class="big post">big</div>
<div class="small post">small</div>
<div class="big post">big</div>
    <!-- should be wrap break -->
<div class="small post">small</div>
<div class="small post">small</div>
<div class="big post">big</div>
    <!-- should be wrap break -->
<div class="big post">big</div>
<div class="small post">small</div>
    <!-- should be wrap break -->

我认为if下面的 ,效果很好,但是else打破了所有的东西。

$('.post').each(function() {    
    if ( $(this).hasClass('big') && $(this).next('.post').hasClass('big') ) {    
        var allElements = $(this).next().andSelf(),
            WRAP_BY = 2;
        for (var i = 0; i < allElements.length; i += WRAP_BY) {
            allElements.slice(i, i + WRAP_BY).andSelf().wrapAll('<div class="flowed" />');
        }//for                            
    }//if
else {
    // the else breaks all the things
        var allElements = $(this).next().andSelf(),
            WRAP_BY = 3;
        for (var i = 0; i < allElements.length; i += WRAP_BY) {
            allElements.slice(i, i + WRAP_BY).andSelf().wrapAll('<div class="flowed" />');
        }//for                                        
}//else
});//each

http://jsfiddle.net/natejones/UvsZE/

4

1 回答 1

2

首先 - 你需要从函数返回,如果元素,已经包装,

其次,我不明白你为什么需要for循环else(你可以$.nextAll()用来获取所有兄弟姐妹)

这里的代码

$('.post').each(function() {
    //return if already wrapped!
    if ($(this).parent().hasClass('flowed')) {
        return;
    }
    var WRAP_BY = 3;
    if ($(this).hasClass('big') && $(this).next('.post').hasClass('big')) {
        WRAP_BY = 2;
    }
    var allElements = $(this).nextAll().andSelf();
    allElements.slice(0, WRAP_BY).wrapAll('<div class="flowed" />');
}); //each​
于 2012-10-22T03:21:20.470 回答