使用Javascript </div>为每5个元素插入<div>

时间:2011-08-30 19:05:43

标签: javascript jquery expressionengine

我有一个简单的图像列表,通过CMS(ExpressionEngine)进行控制。像这样:

<div class="wrapper">
    <a href="#"><img src="#" /></a>
    <a href="#"><img src="#" /></a>
    <a href="#"><img src="#" /></a>
    <a href="#"><img src="#" /></a>
    <a href="#"><img src="#" /></a>
    <a href="#"><img src="#" /></a>
    <a href="#"><img src="#" /></a>
    <a href="#"><img src="#" /></a>
</div>

我想要做的是每5张图片,用一类“幻灯片”将它们包装在一个div中。看起来像这样:

<div class="wrapper">
    <div class="slide">
      <a href="#"><img src="#" /></a>
      <a href="#"><img src="#" /></a>
      <a href="#"><img src="#" /></a>
      <a href="#"><img src="#" /></a>
      <a href="#"><img src="#" /></a>
    </div>
    <div class="slide">
      <a href="#"><img src="#" /></a>
      <a href="#"><img src="#" /></a>
      <a href="#"><img src="#" /></a>
    </div>
</div>

我没有手动编码“”的原因是因为我使用的jQuery内容滑块需要将每5个图像包装在幻灯片div中。

我不确定ExpressionEngine中的代码是如何做到这一点的,但我认为使用Javascript用div包装每5个图像可能更容易。只需让ExpressionEngine一次输出不同的图像。

任何帮助?

6 个答案:

答案 0 :(得分:23)

这是一种方式:

示例: http://jsfiddle.net/T6tu4/

$('div.wrapper > a').each(function(i) {
    if( i % 5 == 0 ) {
        $(this).nextAll().andSelf().slice(0,5).wrapAll('<div class="slide"></div>');
    }
});

这是另一种方式:

示例: http://jsfiddle.net/T6tu4/1/

var a = $('div.wrapper > a');

for( var i = 0; i < a.length; i+=5 ) {
    a.slice(i, i+5).wrapAll('<div class="slide"></div>');
}

答案 1 :(得分:4)

您可以为每个第五个元素创建一个div,并使用append方法将链接移动到它们中:

var wrapper = $('.wrapper');
var div;
$('a', wrapper).each(function(i,e){
    if (i % 5 == 0) div = $('<div/>').addClass('slide').appendTo(wrapper);
    div.append(e);
});

演示:http://jsfiddle.net/Guffa/ybrxu/

答案 2 :(得分:1)

我认为这样做会:

var links = $('.wrapper').children();
for (var i = 0, len = links.length; i < len; i += 5) {
    links.slice(i, i + 5).wrapAll('<div class="slide"/>');
}

答案 3 :(得分:1)

试试这个:

$(function(){
    var curDiv = null;
    var mainDiv = $("div.wrapper");
    $("span", mainDiv).each(function(i, b){
        if(i%5 == 0) {
            curDiv = $("<div class='slide'/>").appendTo(mainDiv);
        }
        curDiv.append(b);
    });
});

答案 4 :(得分:0)

你需要使用jQuery slice和wrap

检查this question

答案 5 :(得分:0)

使用slice()选择元素子集,然后使用wrapAll()将div包围起来。这是一个功能。

var wrapEveryN = function(n, elements, wrapper) {
   for (var i=0; i< elements.length; i+=n) {
       elements.slice(i,i+n).wrapAll(wrapper);
   }
}

wrapEveryN( 5, $(".wrapper a"), '<div class="slide"></div>' );

演示:http://jsfiddle.net/C5cHC/

请注意,slice的第二个参数可能超出范围,但jQuery似乎会自动处理它。