我有一大堆元素需要分组,但是因为它是一些我无法改变的机器,我需要使用jquery(我对它非常熟悉)基础知识)
基本上我在表单元素中有一堆p标签和div松散(是坏标记,但这是另一个故事)。我需要将p标签与字段集中的以下一个或两个div组合在一起。
我已经尝试插入fieldset close然后在每个p元素之前开始标记,但我想将它排序的机制想要插入合法元素,这样就不起作用了
答案 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));
});
代码转换
<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') ));
});