jQuery:wrapAll但是单独的元素集?

时间:2011-01-13 14:26:55

标签: jquery wrapall

我有一个分组系统,两个div之间的所有元素都组合在一起。请参阅下面的代码,看看我想说的是什么:

$(document).ready(function(){
var groupo = $('div').filter(function(){return $(this).text().match(/\[group\]/)}); //finds "[group]"
var groupc = $('div').filter(function(){return $(this).text().match(/\[\/group\]/)}); //finds "[/group]"
groupc.addClass("groupclose"); //adds the class groupclose so that it can be used by nextUntil
 groupo.nextUntil(".groupclose").wrapAll('<div class="group"></div>');
 groupo.remove();
 groupc.remove();
});

当HTML为:

<div>[group]</div>
<div>first</div>
<div>second</div>
<div>[/group]</div>

它工作得很好,但是当有两个或更多“组”时,wrapAll将它们包装在一起,例如:

<div>[group]</div>
<div>first</div>
<div>second</div>
<div>[/group]</div>

<div>[group]</div>
<div>this is in</div>
<div>another group</div>
<div>which get wrapped together with the one above</div>
<div>[/group]</div>

问题与此wrapAll jQuery problem类似,但在这种情况下,我们知道集合中div的数量,而在这种情况下我们不知道。

有什么想法吗?

修改:添加了指向jsbin http://jsbin.com/ejepu3

的链接

1 个答案:

答案 0 :(得分:0)

我认为您只需要遍历groupo的内容。此外,无需使用filter()。您可以使用:contains('')选择器

var groupo = $("div:contains('[group]')");
var groupc = $("div:contains('[/group]')").addClass("groupclose");

$(groupo).each(function(){
    $(this).nextUntil(".groupclose").wrapAll('<div class="group"></div>');
});

groupo.remove();
groupc.remove();

工作版:http://jsfiddle.net/48Pfp/2/