2013-08-29 3 views
9

$('.my-element') एकाधिक तत्व से मेल खाता है, क्या इनमें से एक यादृच्छिक तत्व प्राप्त करने का एक त्वरित तरीका है?

+0

हां, वैसे ही आपको एक सरणी से यादृच्छिक मूल्य प्राप्त होगा। –

उत्तर

26
$.fn.random = function() { 
    return this.eq(Math.floor(Math.random() * this.length)); 
}   

$(selector).random(); 
+2

यदि कोई प्लगइन पहले से मौजूद नहीं है, तो कृपया एक बनाएं। :) – htxryan

+2

यह मेरा से बेहतर है। – DeeDee

+1

मैंने एक अजीब व्यवहार देखा। यदि चयनकर्ता केवल 2 तत्वों से मेल खाता है, तो आपका जवाब 'मंजिल() 'पर घूमने के कारण, हमेशा (मुझे लगता है) पहले व्यक्ति को वापस कर देगा। यह सिर्फ मैं हूँ? –

1
var numElements = $('.my-element').length; 
var randomNum = Math.floor(Math.random()*numElements); 
//Select your random element 
$('.my-element:nth-child(' + randomNum + ')'); 
+2

यह पूरी तरह से काम नहीं करेगा क्योंकि [nth-child() चयनकर्ता 1-आधारित है] (http://api.jquery.com/nth-child-selector/), जबकि आपके द्वारा बनाई गई यादृच्छिक दिनचर्या 0-आधारित है। लोग अक्सर इसे याद करते हैं क्योंकि 1-आधारित कुछ देखने के लिए प्रोग्रामिंग में दुर्लभ है। 4 आइटम होने पर आपका दिनचर्या कभी भी चौथी वस्तु का चयन नहीं करेगा। – Volomike

2

एक और भी वितरण पाने के लिए आपको सरणी से यादृच्छिक गिनती और बिटवाइज़ ऑपरेटर के साथ दशमलव ड्रॉप गुणा कर सकते हैं।

var arr = ['a','b','c']; 
arr[~~(Math.random() * arr.length)]; //even odds of a, b, or c 
+0

~~ Math.floor() – xtian

+0

के समान परिणाम देने लगता है, उनके पास एक ही आउटपुट है, लेकिन ~~ तेजी से गणना करता है, खासकर पुराने ब्राउज़र में। यहां उनकी तुलना एक आलेख है: http://rocha.la/JavaScript-bitwise-operators-in-practice – myrcutio

संबंधित मुद्दे