Disons que j'ai une collection d'éléments de "articles" comme:
p>
<p class="item">Item 1</p> <p class="item">Item 2</p> <div class="wrapper"> <p class="item group">Item 3</p> <p class="item group">Item 4</p> </div> <p class="item">Item 5</p> <div class="wrapper"> <p class="item group">Item 6</p> <p class="item group">Item 7</p> <p class="item group">Item 8</p> </div> <p class="item">Item 9</p>
3 Réponses :
Essayez enveloppement code> méthode à la place:
$(".group").map(function() {
if (!$(this).prev().hasClass("group")) {
return $(this).nextUntil(":not(.group)").andSelf();
}
}).wrap("<div class='wrap' />");
Vision, je vais utiliser cela dans mon code, veuillez vous procéder s'il y a des problèmes liés à la licence CC. C'est super facile et utilise ce que j'ai initialement aimé à propos de JQuery, mais s'est écarté d'après avoir appris JavaScript plus ... c'est-à-dire la simplicité des commandes simples à cordes pour atteindre tellement !. En outre, j'ai appris deux nouvelles méthodes . Et) code> et .map () code> méthode pour produire un .wrapall () code> effet.
@AlexanderDixon content que vous ayez trouvé cela utile. N'hésitez pas à utiliser le code partout où vous le souhaitez. BTW, envisagez d'utiliser addack code> au lieu de code>, car ce dernier est maintenant obsolète.
Utiliser enveloppant au lieu d'envelopper.
var group = [];
$(".item").each(
function(i, item) {
if ($(item).hasClass("group")) {
group.push(item);
}
else {
$(group).wrapAll('<div class="wrap" />');
group = [];
}
}
);
Vous pouvez utiliser une combinaison de Exemple sur JS bin strong> pour contourner les problèmes actuels de Jsfiddle. P> la méthode Alors, ce que nous devons faire ici est de créer un objet jQuery pour chaque groupe, puis mettez tous ces éléments dans un autre Objet "Master" JQuery. Commencez par sélectionner tous les éléments de chacun élément, créez un objet jQuery qui inclut l'élément et tous les frères et sœurs suivants avec Les objets jQuery résultants sont automatiquement placés à l'intérieur " Master "objet parce qu'ils prennent la place des éléments nus que nous avons sélectionnés avec .filter code> et .map code> pour obtenir le résultat souhaité: Justification h3>
.wrap code> Incorçons Chaque élément em> à l'intérieur de l'objet JQuery actuel à l'intérieur du marquage de votre choix. Il s'ensuit que si vous souhaitez envelopper plusieurs éléments dans le même wrapper, vous devez correspondre à ces n éléments avec un objet JQuery, puis créer un autre objet JQuery contenant un em> élément: le premier objet JQUERY. C'est ce dernier objet que vous devriez passer à .wrap code>. P> .group code> éléments qui ne sont pas eux-mêmes précédés par un .group code> frère: p> .group code>: p> .filter code> à l'intérieur de l'objet JQuery que nous avons créé avec $ (". item.group ") code>. Un appel final à .wrap code> ... enveloppe les choses. :) p> p>
Il a fallu environ 4 ans mais, des félicitations à vous pour le .wrap () code> punk. J'ai compris! Aussi, merci pour cette impressionnante réponse et explication.
Ne voulez-vous que grouper des ensembles contigus de
group code> éléments? I.E. Pourriez-vous avoir deux groupes dans une liste, qui doivent être conservés séparés?@Alnitak, tu as raison de m'empêcher de te tenir quelque chose de toi. Ceci est bien correct, il peut potentiellement être plusieurs «ensembles» de groupes qui sont chacun enveloppés. Je mettrai à jour ma question, mais oui, je joue avec Jsfiddle et c'est douloureusement lent ...