2016-05-16 73 views
1

我有以下代码:如何在jQuery中包装两个元素的组?

<span>Hello</span> 
<span>Hello</span> 
<span>Hello</span> 
<span>Hello</span> 
<span>Hello</span> 
<span>Hello</span> 

我想把它变成这样:

<div> 
    <span>Hello</span> 
    <span>Hello</span> 
</div> 
<div> 
    <span>Hello</span> 
    <span>Hello</span> 
</div> 
<div> 
    <span>Hello</span> 
    <span>Hello</span> 
</div> 

我怎样才能做到这一点?

+1

为什么downvotes?当然这是一个有效的问题? – think123

+0

您没有显示或显示任何您已经尝试完成此操作的内容。 – jwatts1980

+0

@ jwatts1980我通常会这样做 - 除了我发现这个问题非常极端 - 要么是整个事情,要么我根本不知道如何做到这一点。 – think123

回答

1

更新

使用此代码,而不是 - 它更灵活,因为它不依赖于子元素的父内的定位:

var odds = $("span:odd"); 
var evens = $("span:even"); 
var i = 0; 
odds.each(function() { 
    $(this).add(evens[i]).wrapAll('<div></div>'); 
    i++; 
}); 

想通了与在网上搜索一下:

$("span:nth-child(odd)").each(function() { 
    $(this).add($(this).next()).wrapAll('<div></div>'); 
}); 

span:nth-child(odd)表示每秒选中<span>$(this).add($(this).next())选择当前<span>和下一个,然后.wrapAll将它们集体包装在<div>标签中。

希望它有帮助!

+0

@Pang我的错误 - 我不能计算:) – think123

+0

这个答案似乎并没有工作,当我尝试它。应该使用'(odd)'和'prev()',或者'(even)'和'next()'。你可以仔细检查? – Pang

+0

它工作 - [这是一个小提琴](https://jsfiddle.net/tohs1crb/)+1认为 – gibberish

0

你可以用.slice()做到这一点,就像这样:

var divs = $("div>div"); 
for(var i = 0; i < divs.length; i+=2) { 
    divs.slice(i, i+2).wrapAll("<div class='new'></div>"); 
} 
相关问题