首先,我知道我应该使用服务器端语言来实现这一点,而不是像jquery这样的客户端,但这不是重点,我只是想学习如何使用它来操作html。继承人html:
<div class="items">
<div class="boxgrid"><span class="cushycms"><a href="#"><img src="1.jpg" alt=""/></a></span><div class="cover"><span class="film_title">Title 1</span></div></div>
<div class="boxgrid"><span class="cushycms"><a href="#"><img src="2.jpg" alt=""/></a></span><div class="cover"><span class="film_title">Title 2</span></div></div>
<div class="boxgrid"><span class="cushycms"><a href="#"><img src="3.jpg" alt=""/></a></span><div class="cover"><span class="film_title">Title 3</span></div></div>
<div class="boxgrid"><span class="cushycms"><a href="#"><img src="4.jpg" alt=""/></a></span><div class="cover"><span class="film_title">Title 4</span></div></div>
<div class="boxgrid"><span class="cushycms"><a href="#"><img src="5.jpg" alt=""/></a></span><div class="cover"><span class="film_title">Title 5</span></div></div>
<div class="boxgrid"><span class="cushycms"><a href="#"><img src="6.jpg" alt=""/></a></span><div class="cover"><span class="film_title">Title 6</span></div></div>
</div>
我希望能够将<divs>
中的每3 <div class="items">
换成另一个div:<div class="row"></div>
。所以它最终会像这样:
<div class="items">
<div class="row">
<div class="boxgrid"><span class="cushycms"><a href="#"><img src="1.jpg" alt=""/></a></span><div class="cover"><span class="film_title">Title 1</span></div></div>
<div class="boxgrid"><span class="cushycms"><a href="#"><img src="2.jpg" alt=""/></a></span><div class="cover"><span class="film_title">Title 2</span></div></div>
<div class="boxgrid"><span class="cushycms"><a href="#"><img src="3.jpg" alt=""/></a></span><div class="cover"><span class="film_title">Title 3</span></div></div>
</div>
<div class="row">
<div class="boxgrid"><span class="cushycms"><a href="#"><img src="4.jpg" alt=""/></a></span><div class="cover"><span class="film_title">Title 4</span></div></div>
<div class="boxgrid"><span class="cushycms"><a href="#"><img src="5.jpg" alt=""/></a></span><div class="cover"><span class="film_title">Title 5</span></div></div>
<div class="boxgrid"><span class="cushycms"><a href="#"><img src="6.jpg" alt=""/></a></span><div class="cover"><span class="film_title">Title 6</span></div></div>
</div>
</div>
如何使用jquery的选择器完成此操作?我以为我可以使用类似的东西:
$("div.items:nth-child(3n)").wrap('<div class="row"></div>');
但这不起作用。有什么想法吗?
答案 0 :(得分:7)
我认为你真正想要的是1到3之间的div范围,而不只是包裹第三个div,是吗?
要获得范围,您需要使用jquery slice。
答案 1 :(得分:2)
作为插件:
jQuery.fn.wrapInChunks = function(html, chunkSize) {
chunkSize = chunkSize || 1;
var items = this.get(),
rows = [],
cur = rows[0] = $(html);
while (items[0]) {
if (rows[rows.length - 1].children().length === chunkSize) {
cur = rows[rows.length] = $(html);
}
cur.append( items.shift() );
}
return this.pushStack(rows);
};
$('.boxgrid').wrapInChunks('<div class="row" />', 3).appendTo('.items');
答案 2 :(得分:1)
使用map(),slice()和wrapAll();
$(document).ready( function(){
var results =[];
var elements = $(".items").children('.boxgrid');
$.map( elements , function(i, n){
if( n%3 === 0 ){
results.push(n);
}
});
$.each( results , function(i,v){
elements.slice(v, v+3).wrapAll('<div class="row"></div>');
});
});
这是经过测试和运作的。
答案 3 :(得分:0)
您必须切片元素并使新的div元素包含切片元素。下面是一个代码示例。我不知道有任何更简单的方法来做到这一点。
$(".items").each(function()
{
var rowDiv = document.createElement("div");
$(rowDiv).addClass("row");
for(i=0; i< $(this).find("> .boxgrid").length ; i+= 3)
{
$(rowDiv).append( $(this).find("> .boxgrid").slice(i, i+3).clone() );
$(this).append(rowDiv);
rowDiv = document.createElement("div");
$(rowDiv).addClass("row");
}
$(this).find("> .boxgrid").remove();//Remove all the immediate boxgrid child elements.
});