views:

106

answers:

3

How can I return a random element in jQuery by doing something like $(.class).random.click()?

So, if .class had 10 links, it would randomly click one of them.

Here is what I did:

var rand_num = Math.floor(Math.random()*$('.member_name_and_thumb_list a').size());
$(".member_name_and_thumb_list a").eq(rand_num).click();
+1  A: 
var rand = Math.floor(Math.random()*11);

$('.class').eq(rand).click();

Math.random() gets you a pseudo-random number between 0 and 1, so multiplying it by 11 and rounding it down gets you 0 to 10. .eq() is 0 indexed, so this will get you a random jQuery element out of the 10 you have.

Yi Jiang
Great minds think alike?
Marko
@Marko Apparently, yes ;)
Yi Jiang
+2  A: 
var random = Math.Round(Math.random()*10);
$(".someClass").eq(random).click();
Marko
+6  A: 

You can write a custom filter (taken from here):

jQuery.jQueryRandom = 0;
jQuery.extend(jQuery.expr[":"], {
    random: function(a, i, m, r) {
        if (i == 0) {
            jQuery.jQueryRandom = Math.floor(Math.random() * r.length);
        };
        return i == jQuery.jQueryRandom;
    }
});

Example usage:

$('.class:random').click()

The same thing but as a plugin instead:

​jQuery.fn.random = function() {
    var randomIndex = Math.floor(Math.random() * this.length);  
    return jQuery(this[randomIndex]);
};

Example usage:

$('.class').random().click()
Anurag
+1 for the filter extension.
prodigitalson