7
votes

Déterminez quelle div est au milieu d'une liste div

J'ai une liste divissi qui ressemble à ceci: xxx pré>

Je dois déterminer quelle div se situe au milieu de la liste, veuillez noter que le numéro de div est dynamique, dépend de l'utilisateur. saisir. Mon objectif final est de déterminer les divs des DIV situés à gauche et à droite de la "Div" Moyen Div "puis appliquent une classe dépend de sa position. p>

Le résultat final devrait ressembler à ceci: P>

    var setMidClasses = function (elementList, beforeMid, atMid, afterMid) {
    var i = 0,
        hasMid = elementList.length % 2,
        mid = Math.floor(elementList.length / 2);

    while (i < mid) {
        elementList[i].classList.add(beforeMid);
        i += 1;
    }

    if (hasMid == 1) {
        elementList[i].classList.add(atMid);
        i += 1;
    }

    while (i < elementList.length) {
        elementList[i].classList.add(afterMid);
        i += 1;
    }

};



setMidClasses(document.querySelectorAll(".item"),
    "left", "middle", "right");


1 commentaires

Que se passe-t-il si vous avez un nombre pair de .Item s?


4 Réponses :


7
votes

Dans le cas d'un nombre impair d'éléments, vous pouvez obtenir l'élément du milieu à l'aide de math.floor (éléments.longueur / 2) code>. À partir de là, vous pouvez utiliser prevall () code> et NEXTALLALL () code> Pour ajouter les classes aux éléments correspondants:

p>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div> <!--the middle one-->
<div class="item">4</div>
<div class="item">5</div>


1 commentaires

Mise à jour de la question avec votre code édité pour la manipulation des numéros même, veuillez vérifier si mon édition est correct



0
votes

sans jQuery:

(Vous n'avez pas répondu à la manière de gérer les listes de numérotation numérotées. J'ai choisi d'omettre la classe centrale et de diviser en deux parties: avant et après Mid) P>

p>

<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div> <!--the middle one-->
<div class="item">4</div>
<div class="item">5</div>


1 commentaires

Mise à jour de la question avec votre code édité pour la manipulation des numéros même, veuillez vérifier si mon édition est correct



1
votes

sans jQuery, vous pourriez aussi bien faire comme ça;

p>

<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>


0 commentaires

0
votes

Voici une version qui utilise Récursion em> avec .First () /. Dernier ()

Probablement pas très efficace et pourrait être fait avec une boucle, mais je voulais montrer une version avec récursivité . P>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>


0 commentaires