Comment sélectionner tout le contenu entre deux tags dans jQuery

J’ai un document avec des titres et des listes non ordonnées.

Comment puis-je utiliser JQuery pour sélectionner un titre donné (par son nom de classe unique) ET tout le contenu entre cet en-tête et le titre suivant?

Mettre à jour:

Vos suggestions sont excellentes, mais ne sont pas ce que je recherche. Dans le code ci-dessous, par exemple, je voudrais accéder uniquement au “h1” avec l’identifiant de “heading2” et tout ce qui peut aller jusqu’à “h1” avec l’identifiant de “heading3”.

Les exemples jQuery fournis ci-dessus accèdent à tout après la première balise “h” qui n’est pas une balise “h”.

… ou corrigez-moi si je me trompe 🙂

...

    ...

...

    ...

...

...

    ...

...

    ...

...

...

    ...

...

    ...

...

    Deux méthodes en particulier seraient très utiles pour résoudre ce problème: .nextUntil et .andSelf . Le premier saisira tous les frères et sœurs suivant votre sélecteur, et ce dernier regroupera également tout ce qui correspond à votre sélecteur, vous donnant un object jQuery qui les inclut tous:

     $("#heading2") .nextUntil("#heading3").andSelf() .css("background", "red"); 

    Cela se traduit par ce qui suit:

    entrer la description de l'image ici

    Voici la solution que j’utilise pour mes projets:

    sélecteur jQuery

     (function ($) { $.fn.between = function (elm0, elm1) { var index0 = $(this).index(elm0); var index1 = $(this).index(elm1); if (index0 <= index1) return this.slice(index0, index1 + 1); else return this.slice(index1, index0 + 1); } })(jQuery); 

    Usage

     $('body').between($('#someid'), $('#someid2')).each(function () { // Do what you want. }); 
     $('#secondSelector').prevAll('#firstSelector ~ *') 

    Oui vous avez raison. Cela évitera uniquement le sélecteur souhaité. Peut-être que cela doit être plus détaillé:

     $(firstSelector).nextAll().not(secondSelector).not($(secondSelector).nextAll()).text() 

    Peut-être avec

     $(selectorForFirstHeading).nextAll().not(selectorForLastHeading).text() 

    Pourquoi est-ce que j’utilise text() ? Parce que html() ne retournera que le code HTML interne du premier élément de résultat.

    J’ai l’impression que la réponse acceptée nécessite une mise à jour depuis la sortie de jQuery 1.8 et versions ultérieures. .andSelf() est obsolète. A sa place, nous avons .addBack() . La documentation explique tout ce que vous devez savoir.

    Si vos éléments sont au même niveau, quelque chose comme ceci:

     

    ...

      ...

    ...

      ...

    ...

    ...

    En d’autres termes, votre prochain élément d’en-tête n’est pas un enfant d’un élément au même niveau que le premier élément d’en-tête. Vous pouvez essayer ce code:

     // This will get all the following siblings of 

    except those that are headings themselves var elements = $('#heading1').nextAll().not("h1");