繁体   English   中英

如何将 div 包裹在多个相同的类元素周围

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM