wrapAll проблема jQuery - PullRequest
       20

wrapAll проблема jQuery

2 голосов
/ 07 октября 2009

Мне нужно заключить три деления в одно, но эта группа из трех делений повторяется в коде несколько раз. Может быть, мой HTML объяснит:

<div class="one" />
<div class="two" />
<div class="three" />

<div class="one" />
<div class="two" />
<div class="three" />

То, чего я пытаюсь достичь, это:

<div class="wrap">
  <div class="one" />
  <div class="two" />
  <div class="three" />
</div>

<div class="wrap">
  <div class="one" />
  <div class="two" />
  <div class="three" />
</div>

Это упаковывает все в один div:

$('.one, .two, .three').wrapAll('<div class="wrap" />')

Как мне обернуть группы отдельно?

Ответы [ 5 ]

5 голосов
/ 07 октября 2009
$(function(){
    var all = $('.one, .two, .three');
    for(i=0; i<all.length; i+=3){
        all.slice(i,i+3).wrapAll('<div class="wrap" />');
    }
});

Посмотри в действии: http://jsbin.com/uqosa/

Кстати, <div class="one" /> у меня не работал в Firefox, мне пришлось закрыть их с помощью </div>.

1 голос
/ 07 октября 2009

Попробуйте это:

$('div.one').each(function() {
    var wrap = $(this).wrap('<div class="wrap"></div>').parent();
    wrap.next('div.two').appendTo(wrap);
    wrap.next('div.three').appendTo(wrap);
});
1 голос
/ 07 октября 2009

Это будет работать:

$(function() {
    var $ones = $('div.one');
    var $twos = $('div.two');
    var $threes = $('div.three');

    $ones.each(function(idx) {
        $('<div class="wrap"></div>')
            .append($ones.eq(idx))
            .append($twos.eq(idx))
            .append($threes.eq(idx))
            .appendTo('body');
    });
});
0 голосов
/ 07 октября 2009
$.fn.matchUntil = function(expr) {
    var match = [];
    this.each(function(){
        match = [this];
        for ( var i = this.nextSibling; i; i = i.nextSibling ) {
            if ( i.nodeType != 1 ) { continue; }
            if ( $(i).filter(expr).length > 0 ) { break; }
            match.push( i );
        }
    });
    return this.pushStack( match );
};

использование:

$(".one").each( function() {
    $(this).matchUntil(".one").wrapAll("<div class='wr'></div>");
})

это просто измененная версия http://docs.jquery.com/JQuery_1.2_Roadmap#.nextUntil.28.29_.2F_.prevUntil.28.29,, которая, похоже, не работает с новым jQuery.

0 голосов
/ 07 октября 2009

В моей голове это должно работать:

$('.one').each(function() {
    var wrap = $('<div>').addClass('wrap'), two = $(this).next(), three = $(two).next();
    $(this).after(wrap).appendTo(wrap)
    two.appendTo(wrap), three.appendTo(wrap)
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...