使用jQuery包装元素组
我有一个元素列表,我想用div从第一个元素开始对它们进行分组,然后以BREAK类结束,然后在BREAK类之后开始一个新的组。
所以下面的代码,
Test 0 Test 1 Break 0 Test 2 Test 3 Break 1 Test 4 Test 5 Test 6
会成为,
Test 0 Test 1 Break 0 Test 2 Test 3 Break 1 Test 4 Test 5 Test 6 Add last break element
并在最后一组中附加一个div元素。
有任何想法吗? 提前致谢。
我想你也可以做这样的事情:首先你在所有.test
父容器中插入一个.break
,然后正确使用wrapAll
方法换行组:
$('.test').parent().append('Break 2'). find('.test + .break').each(function() { $(this).prevUntil('.break, .group').add(this).wrapAll(''); });
.group { padding: 3px; background: #BFECBE; margin-bottom: 2px; }
Test 0 Test 1 Break 0 Test 2 Test 3 Break 1 Test 4 Test 5 Test 6
我可能会简单地说:使用您添加的容器循环遍历它们,每次看到break
时添加一个新容器:
var div; $("selector for the divs").each(function() { if (!div) { div = $("").insertBefore(this); } div.append(this); if ($(this).hasClass("break")) { div = undefined; } }); if (div) { $("last break").addClass("break").appendTo(div); }
示例(我添加了一个wrapper
类,因此我们可以在添加时看到效果):
$("#go").click(function() { var div; $("#container > div").each(function() { if (!div) { div = $("").addClass("wrapper").insertBefore(this); } div.append(this); if ($(this).hasClass("break")) { div = undefined; } }); if (div) { $("last break").addClass("break").appendTo(div); } });
.test { color: blue; } .break { color: red; } .wrapper { border: 1px solid #aaa; }
Test 0 Test 1 Break 0 Test 2 Test 3 Break 1 Test 4 Test 5 Test 6
这段代码工作正常,你也可以在这里查看小提琴和演示
$("div.test").each(function() { if (!$(this).nextAll(".break").length) $(".test").last().after('Add last break element'); if (!$(this).parents(".group").length) $(this).add($(this).nextUntil('.break+.test').andSelf()).wrapAll(''); });
.group { background: red; margin: 10px; }
Test 0 Test 1 Break 0 Test 2 Test 3 Break 1 Test 4 Test 5 Test 6