jquery包装元素

我有这个代码,每3个我需要用div包装

(原版的)

(应该成为)

 

我把这个插件放在一起很好地完成了这项工作

 (function($){ $.fn.wrapChildren = function(options) { var options = $.extend({ childElem : undefined, sets : 1, wrapper : 'div' }, options || {}); if (options.childElem === undefined) return this; return this.each(function() { var elems = $(this).children(options.childElem); var arr = []; elems.each(function(i,value) { arr.push(value); if (((i + 1) % options.sets === 0) || (i === elems.length -1)) { var set = $(arr); arr = []; set.wrapAll($("<" + options.wrapper + ">")); } }); }); } })(jQuery); 

您传入一个选项对象定义

  • childElem – 要包装的直接子节点的元素nodeType
  • sets – 如何对子元素进行分组。 例如,在您的情况下,3组。 默认值为1
  • wrapper – 包装子元素的元素.default是

在测试数据上使用类似的东西。

 $(function() { $('#entries').wrapChildren({ childElem : 'a' , sets: 3}); }); 

这是一个可以玩的工作演示 。 添加/编辑 URL以使用代码。

编辑:

如果certificate有用的话,我很想把它变成一个更完善的插件。

我已经创建了一个改进版的插件

强大的工作,可能不是最聪明的事情:

 var $entries = $("#entries"); var $div = $('
').appendTo($entries); while($div.next().length > 0){ $div.append($div.nextAll().slice(0,3)); $div = $('
').appendTo($entries); }

将一个类应用于每个水平填充内容的“sub-div”,并​​将其赋予clrar:both; 作为css属性,它将显示您想要的方式。 如果您想垂直显示它,请应用float:left; 代替。

 var $c = $('#entries'); while ($c.children('a').length) { $c.children('a:lt(3)').wrapAll('
'); }

http://jsfiddle.net/alnitak/sppgP/上的工作演示(尽管有不同的HTML结构)