[英]How to wrap div around multiple of the same class elements
我试图将多个相同类的 div 包装到一个 div 中,并跳过不属于同一个类的 div。 .wrap 不会将它们组合起来,而 .wrapAll 会在下面抛出未分类的 div。 我一直在尝试创建替代解决方案,但无济于事。
原来的:
<div class="entry">Content</div>
<div class="entry">Content</div>
<div class="entry">Content</div>
<div>Skip in wrap</div>
<div class="entry">Content</div>
<div class="entry">Content</div>
<div class="entry">Content</div>
continued...
想要的结果:
<div>
<div class="entry">Content</div>
<div class="entry">Content</div>
<div class="entry">Content</div>
</div>
<div>Skip in wrap</div>
<div>
<div class="entry">Content</div>
<div class="entry">Content</div>
<div class="entry">Content</div>
</div>
您可以使用for
循环快速遍历<div>
元素。 在下面的代码中,只需更改此处的初始选择器即可获取所有兄弟 div,例如#content > div.entry
或它们所在的任何位置:
var divs = $("div.entry");
for(var i=0; i<divs.length;) {
i += divs.eq(i).nextUntil(':not(.entry)').andSelf().wrapAll('<div />').length;
}
你可以在这里试一试。 我们只是循环遍历.entry
<div>
元素,使用.nextUntil()
获取所有.entry
元素,直到有一个非.entry
元素使用:not()
选择器。 然后我们将接下来的元素,加上我们开始的元素 ( .andSelf()
) 并在该组上执行.wrapAll()
。 在它们被包装之后,我们将跳过循环中的许多元素。
我刚刚提出了一个简单的自定义解决方案。
var i, wrap, wrap_number = 0;
$('div').each(function(){ //group entries into blocks "entry_wrap_#"
var div = $(this);
if (div.is('.entry')) {
wrap = 'entry_wrap_' + wrap_number;
div.addClass(wrap);
} else {
wrap_number++;
}
});
for (i = 0; i <= wrap_number; i++) { //wrap all blocks and remove class
wrap = 'entry_wrap_' + i;
$('.' + wrap).wrapAll('<div class="wrap"/>').removeClass(wrap);
}
您也可以将新的 div 附加到您的标记中,然后将您想要包装的内容附加到这些 div 中。
如果您的标记是这样的:
<div class="wrap">
<div class="col-1"></div>
<div class="col-1"></div>
<div class="col-1"></div>
<div class="col-1"></div>
<div class="col-1"></div>
<div class="col-2"></div>
<div class="col-2"></div>
<div class="col-2"></div>
<div class="col-2"></div>
<div class="col-2"></div>
</div>
使用以下内容附加两个新的 div(第一column-one
和第二column-two
),然后将适当的内容附加到这些 div 中:
// Set vars for column content
var colOne = $('.col-1').nextUntil('.col-2').addBack();
var colTwo = $('.col-2').nextAll().addBack();
// Append new divs that will take the column content
$('.wrap').append('<div class="column-first group" /><div class="column-second ground" />');
// Append column content to new divs
$(colOne).appendTo('.column-first');
$(colTwo).appendTo('.column-second');
演示在这里: http : //codepen.io/zgreen/pen/FKvLH
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.