我有一系列基于大小分配.big
或.small
的DIV。他们需要分成两组或三组。实际上,只有两个.big
可以放在分配的空间中。
如果两个.big
DIV彼此相邻,则应将它们分成两组。否则,DIV应该以三个为一组包装。
请让我知道我做错了什么以及如何让它发挥作用。下面是一个示例,其中包含有关包装应该中断的位置的注释。下面是我在jQuery中尝试过的,以及link to 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
答案 0 :(得分:2)
首先 - 你需要从函数返回,如果元素已经被包装,
第二,我不明白为什么你需要在for
中进行else
循环(你可以使用$.nextAll()
来获取当前的所有兄弟姐妹)
here代码
$('.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