2010-05-05 14 views
1

En jQuery comment est-ce que je pourrais contourner un ensemble répétable d'éléments avec un div?Comment ajouter un ensemble d'éléments repeatbale dans jQuery?

Par exemple, j'ai:
img
h4
p
img
h4
p
img
h4
p
je dois envelopper chaque img, h4, ensemble p avec une classe div = "conteneur". Donc, il ressemblera:
<div> class = "conteneur"> img h4 p </div >
<div> class = "conteneur"> img h4 p </div >
<div> class = » conteneur "> img h4 p </div >

Toutes les idées sur la façon dont je peux y parvenir car elle me rend fou! Je continue d'obtenir des div.containers imbriqués! Merci!

Répondre

1

Vous pouvez faire quelque chose comme ceci:

var elems = $("#content").find("img, h4, p"); 
for(var i = 0; i < elems.length; i+=3) { 
    elems.slice(i, i+3).wrapAll("<div class='container'></div>"); 
} 

Cela fonctionne en sélectionnant le conteneur ces éléments sont et saisir ce types, si les éléments que vous voulez sont tout, vous pouvez remplacer .find(selector) avec .children(), en ce cas, j'utilisé cela pour l'élément parent:

<div id="container"></div> 

You can see a working demo here

+0

+1, vous gagnez karim79

+0

@karim - a eu le léger avantage de répondre à quelques reprises;) http://stackoverflow.com/questions/2485479/jquery-wrap-code-après-x-number-of-elements –

+0

haha ​​désolé je n'ai même pas voir cette question précédente! Merci tas homme et merci de me montrer le site jsfiddle c'est génial. – Globalz

0

Votre exampl e est assez simple, donc cela va fonctionner:

$("h4").each(function() { 
    $(this).prev().andSelf().next().andSelf().wrapAll("<div class='container'/>"); 
}); 

demo here

+0

C'est un ** lot ** de traverser pour faire quelque chose qui peut être beaucoup plus rapide, '$ (" img "). Each (function() {$ (this) .nextUntil (" img "). EtSelf(). WrapAll ("

");}); 'par exemple. –

+0

Ne connaissait pas 'nextUntil' (pouvez-vous dire que je ne fais pas beaucoup de traversée de DOM dans jQuery?). Grande amélioration :) – bcherry