jQuery: wrapAll, но отдельные наборы элементов? - PullRequest
0 голосов
/ 13 января 2011

У меня есть несколько группирующая система, в которой все элементы между двумя 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 задачу , но в этом случае мы знаем число div в наборе, а в этом случае мы не знаем.

Есть идеи?

Редактировать : добавлена ​​ссылка на jsbin http://jsbin.com/ejepu3

1 Ответ

0 голосов
/ 13 января 2011

Я думаю, вам просто нужно перебрать содержимое 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/

...