首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相邻兄弟姐妹的包装组

相邻兄弟姐妹的包装组
EN

Stack Overflow用户
提问于 2015-05-20 21:00:05
回答 1查看 725关注 0票数 1

我需要根据特定的类值在表中包装不同的邻接兄弟div组。HTML标记可能会有所不同,但这里有一个示例..。

代码语言:javascript
复制
<div class="grid-4">4</div>
<div class="grid-4">4</div>
<div class="grid-4">4</div>
<div class="grid-4">4</div>
<div class="grid-8">8</div>
<div class="grid-8">8</div>
<div class="grid-4">4</div>
<div class="grid-4">4</div>
<div class="grid-8">8</div>
<div class="grid-4">4</div>
<div class="grid-4">4</div>
<div class="grid-4">4</div>

以下是不同的分组:

  1. 一个网格-8和一个网格-4
  2. 一个网格-4和一个网格-8
  3. 三格-4
  4. 不管剩下什么

我有#1和#2的代码,但我的代码#3并不包括包装中的第三个网格-4。我想我可能误解了邻接的兄弟姐妹选择器。

这个小提琴显示了我到目前为止所拥有的:http://jsfiddle.net/92cmytw9/1/

我做错了什么?谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-20 22:01:21

对于#1和#2您有很好的工作解决方案:

代码语言:javascript
复制
$('#container').find('div.grid-4 + div.grid-8').each(function () {
  $(this)
    .prev()
    .andSelf()
    .wrapAll('<table width="100%"><tr><td></td></tr></table>')
    .attr('class', '');
});

不推荐使用andSelf(),所以使用addBack()代替。

你可以把它简化一点:

代码语言:javascript
复制
$('#container div.grid-4 + div.grid-8').each(function () {
  $(this)
    .prev()
    .addBack()
    .wrapAll('<table width="100%"><tr><td>')
    .attr('class', '');
});

table元素将自动为您关闭。

#3有点棘手。您无法创建集合并处理它的each成员,因为一些三组将与其他三组重叠。

相反,您可以使用一个while循环,并继续处理第一组的三个,直到没有更多。prevUntil(':not(div.grid-4)')抓住了所有需要的东西:

代码语言:javascript
复制
var f4;
while(f4=$('#container div.grid-4 + div.grid-4 + div.grid-4').first(), f4.length) {
  f4.prevUntil(':not(div.grid-4)')
    .addBack()
    .wrapAll('<table width="100%"><tr><td>')
    .attr('class', '');
}

#4更直接:

代码语言:javascript
复制
$('#container > div').wrap('<table width="100%"><tr><td>');

Updated Fiddle

单击顶部的按钮查看效果。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30360278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档