使用jquery对元素进行分组

时间:2009-06-15 09:37:31

标签: jquery

我有一大堆元素需要分组,但是因为它是一些我无法改变的机器,我需要使用jquery(我对它非常熟悉)基础知识)

基本上我在表单元素中有一堆p标签和div松散(是坏标记,但这是另一个故事)。我需要将p标签与字段集中的以下一个或两个div组合在一起。

我已经尝试插入fieldset close然后在每个p元素之前开始标记,但我想将它排序的机制想要插入合法元素,这样就不起作用了

2 个答案:

答案 0 :(得分:7)

如果我理解正确,你有一个文件,其中标记看起来像这样:

<p>paragraph 1</p>
<div>par1 div1</div>
<div>par1 div2</div>
<p>paragraph 2</p>
<div>par2 div1</div>
<div>par2 div2</div>
<p>paragraph 3</p>
<div>par3 div1</div>
<p>paragraph 4</p>
<div>par4 div1</div>

你想最终得到这样的东西:

<fieldset>
 <p>paragraph1</p>
 <div>par1 div1</div>
 <div>par1 div2</div>
</fieldset>
<fieldset>
 <p>paragraph2</p>
 <div>par2 div1</div>
 <div>par2 div1></div>
</fieldset>
.....

如果是这种情况,那么这个jQuery代码段就可以解决问题:

$(function(){   
    $('p').each(function(index,item){
      var nextDiv = $(item).next();
      var followingDiv = $(nextDiv).next('div');
      $(item).wrap("<fieldset id='fieldset" + index + "'></fieldset>");
      $("#fieldset"+index).append(nextDiv).append(followingDiv);
    });
});

答案 1 :(得分:1)

@ JoseBasillo的回答可以简化和概括一点:

var $wrapper = $('#wrapper');
$wrapper.children('p').each(function(index,item) {
    var $following = $(item).nextUntil('p, fieldset');
    $wrapper.append($('<fieldset>').append(item, $following));
});

Demo

代码转换

<div id="wrapper">
    <p>paragraph 1</p>
        ... (whatever but p or fieldset)
    <p>paragraph 2</p>
        ... (whatever but p or fieldset)
    ... (p followed by whatever but p or fieldset)
</div>

进入

<div id="wrapper">
    <fieldset>
        ... (whatever but p or fieldset)
    </fieldset>
    <fieldset>
        ... (whatever but p or fieldset)
    </fieldset>
    ... (fieldset containg [p followed by whatever but p or fieldset])
</div>

如果有人喜欢更短的代码而不是可读性,则无需使用变量$following

var $wrapper = $('#wrapper');
$wrapper.children('p').each(function(index,item) {
    $wrapper.append($('<fieldset>').append( item, $(item).nextUntil('p, fieldset') ));
});