53 votes

javascript - modifier l'ordre des éléments d'une liste HTML

J'ai une liste :

<ul>
    <li>milk</li>
    <li>butter</li>
    <li>eggs</li>
    <li>orange juice</li>
    <li>bananas</li>
</ul>

Comment puis-je réorganiser les éléments de la liste de manière aléatoire en utilisant javascript ?

0 votes

12 votes

@Pekka Il ne semble pas qu'il utilise jQuery.

0voto

Fred Points 553

J'étais à la recherche d'une fonction prototype. Peut-être que cela aidera quelqu'un.

Element.prototype.shuffleChildren = function() {
  for (var i = this.children.length; i >= 0; i--) {
    this.appendChild(this.children[Math.random() * i | 0]);
  }
};

document.querySelector('body').shuffleChildren();

0voto

diachedelic Points 611

Voici une solution qui n'utilise pas de boucle.

function shuffle_children(element) {
    element.append(...Array.from(element.children).sort(function () {
        return Math.random() - 0.5;
    }));
}

-1voto

The Luctus Points 51

D'après la réponse de @Alexey Lebedev, si vous préférez une fonction jQuery qui mélange les éléments, vous pouvez utiliser celle-ci :

$.fn.randomize = function(selector){
  var $elems = selector ? $(this).find(selector) : $(this).children();
  for (var i = $elems.length; i >= 0; i--) {
    $(this).append($elems[Math.random() * i | 0]);
  }

  return this;
}

Puis, appelez-le comme ceci :

$("ul").randomize();        //shuffle all the ul children
$("ul").randomize(".item"); //shuffle all the .item elements inside the ul
$(".my-list").randomize(".my-element"); //shuffle all the .my-element elements inside the .my-list element.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X