Si $ ('. My-Element') code> correspond à plusieurs éléments, y a-t-il un moyen rapide d'obtenir un élément aléatoire hors de ceux-ci? P>
3 Réponses :
$.fn.random = function() {
return this.eq(Math.floor(Math.random() * this.length));
}
$(selector).random();
Celui-ci est meilleur que le mien.
J'ai remarqué un comportement étrange. Si le sélecteur correspond seulement à 2 éléments, votre réponse aura tendance à (je pense) toujours renvoyer le premier, en raison de l'arrondi sur au sol () code>. Est ce juste moi?
@WordPressDéveloppeur Parce que la possibilité de sélectionner un élément dans ce cas est de 50% à 50%, il peut sélectionner plusieurs fois le premier ou le deuxième élément, mais il ne sélectionne pas toujours un élément spécifique. jsfiddle.net/tnafk
var numElements = $('.my-element').length;
var randomNum = Math.floor(Math.random()*numElements);
//Select your random element
$('.my-element:nth-child(' + randomNum + ')');
Cela ne fonctionnera pas complètement parce que le sélecteur NT-enfant () est basé sur 1 - >, alors que la routine aléatoire que vous avez créée est à 0 fois. Les gens manquent souvent cela car il est rare dans la programmation de voir quelque chose à base de 1. Votre routine ne sélectionnera jamais le 4ème élément s'il y avait 4 éléments.
Pour obtenir une distribution uniforme, vous pouvez multiplier au hasard par le nombre de matrices et déposer la décimale avec l'opérateur bitwise.
var arr = ['a','b','c']; arr[~~(Math.random() * arr.length)]; //even odds of a, b, or c
~~ Semble donner le même résultat que math.floor ()
Ils ont la même sortie, mais ~ ~ calcule plus rapidement, en particulier dans les navigateurs plus âgés. Voici un article qui les comparait: ROCHA.LA/JAVASScript-Bitwise-Opérators-in-practice < / a>
Oui, de la même manière que vous auriez une valeur aléatoire d'un tableau.