2010-10-01 16 views
0

J'ai une forme comme ceci:Comment séparer le contenu avec jquery après un certain nombre de divs

<div class="content"> 
    <form> 
    <div class="item"> 
     blablaform stuf 
    </div> 
    <div class="item"> 
     blablaform stuf 
    </div> 
    <div class="item"> 
     blablaform stuf 
    </div> 
    <div class="item"> 
     blablaform stuf 
    </div> 
    </form> 
</div> 

Maintenant, je veux envelopper quelques-unes des divs élément de forme à l'intérieur. Fondamentalement comme ceci:

<div class="content"> 
    <form> 
    <div class="wrapper"> 
     <div class="item"> 
     blablaform stuf 
     </div> 
     <div class="item"> 
     blablaform stuf 
     </div> 
    </div> 
    <div class="wrapper"> 
     <div class="item"> 
     blablaform stuf 
     </div> 
     <div class="item"> 
     blablaform stuf 
     </div> 
    </div> 
    </form> 
</div> 

Comment puis-je le faire avec jQuery? append()? :nth-child ou comment?

Merci.

+0

Désolé @Yi Jiang, pense que nous avions un edit-clash =/@mikeyy, je suggérerais d'apprendre comment fonctionnent les formulaires. Des choses comme 'fieldset', par exemple. –

+0

@David Ah non, ça va, tu es en train d'être meilleur que le mien. Tant que cinq personnes ne sautent pas dedans et la transforment en CW en une minute c'est bien :) –

Répondre

3

Quelque chose comme cela fonctionne:

var elems = $(".content div.item"); 
for(var i = 0; i < elems.length; i+=2) { 
    elems.slice(i, i+2).wrapAll("<div class='wrapper'></div>"); 
} 

You can test it out here, ce que cela fait est de récupérer tous les .item<div> éléments là-dedans, et chaque paire de 2 leur enveloppe, s'il en reste plus (un dernier single un) il sera enveloppé par lui-même.


Ou, nous allons le rendre réutilisable, comme un plug-in:

jQuery.fn.wrapSet = function (interval, wrapElem) { 
    for(var i = 0; i < this.length; i+=interval) { 
    this.slice(i, i+interval).wrapAll(wrapElem); 
    } 
    return this; 
}; 

Ensuite, vous pouvez l'appeler comme ceci:

$(".content div.item").wrapSet(2, "<div class='wrapper'></div>");​ 

You can give that version a try here.

+0

Je suis curieux, à quel point étiez-vous génial * avant * JavaScript? =) –

+0

@David - Je passe la majeure partie de ma journée en C#/Oracle en fait, JavaScript n'est qu'un passe-temps :) –