2009-11-19 12 views
24

का चयन करें। मुझे केवल पहले 5.5 यादृच्छिक तत्वों

क्या एक ही काम करने का कोई और तरीका है?

+0

आप पहले पांच सर्वर साइड चारों ओर एक div लपेट कर सकते हैं, तो का उपयोग ली # प्रथम पाँच: यादृच्छिक ? – Kzqai

+0

नहीं, मैं उपयोग कर सकता हूँ! – AlexC

+0

मुझे "यादृच्छिक" छद्म चयनकर्ता का समर्थन करने वाले jQuery की जानकारी नहीं है, आप इस कार्यक्षमता को कैसे जोड़ते हैं और इसके पीछे कोड तर्क क्या है? – duckyflip

उत्तर

52

यहां jQuery चयन से 5 यादृच्छिक तत्व प्राप्त करने का तरीका है, प्लगइन की कोई आवश्यकता नहीं है!

:

randomElements = jQuery("li").get().sort(function(){ 
    return Math.round(Math.random())-0.5 
}).slice(0,5) 

इस बिंदु पर आप 5 DomElements कि सभी फूल से बेतरतीब ढंग से चयनित किया गया है कि jQuery लौटे

तो आप जो कुछ भी आप उन लोगों के साथ की तरह कर सकते हैं,
जैसे उनके रंग बदलने के लिए है

$(randomElements).css("color","red") 

या प्रदर्शित उनकी संयुक्त पाठ सामग्री:

$(randomElements).text() 
+0

+1, हालांकि मैं उत्सुक हूं कि आपने पाठ में लगातार "यादृच्छिक" वर्तनी क्यों की है, और लगातार कोड स्निपेट में गलत तरीके से लिखा है ... :-) –

+3

सामान्य विचार अच्छा है, लेकिन आपको किसी को शफल नहीं करना चाहिए उस तरह सरणी। छंटनी एक सरणी को घुमाने के लिए एक अक्षम तरीका है, और एक असंगत तुलना समस्याएं पैदा कर सकती है (यहां तक ​​कि संभावित रूप से लूप को अनिश्चित काल तक भी उत्पन्न कर सकता है)। फिशर-येट्स शफल (http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle) का उपयोग करना बेहतर है। –

+6

यह आपको एक यादृच्छिक क्रमबद्ध सरणी नहीं मिलेगा। यहां इसके बारे में एक लेख है (यह उद्देश्य-सी है, लेकिन इससे कोई फर्क नहीं पड़ता) http://cocoawithlove.com/2010/06/sorting-nsmutablearray-with-random.html –

0
$("li:lt(5):random").text() 
+2

भयानक होगा लेकिन यह हमेशा पहले 5 ( – AlexC

8

यादृच्छिक संख्या सूचकांक, 1-5 प्राप्त करें, और उस सूचकांक के साथ उल के बच्चे को प्राप्त करें। इस तरह:

var index = Math.floor(Math.random() * 5) + 1; // nth-child indices start at 1 
alert($("ul:nth-child(" + index + ")").text()); 
+2

ओह , यह पूरी तरह से गलत है। मैंने प्रश्न को पढ़ा है कि पहले पांच में से एक यादृच्छिक तत्व का अनुरोध है, सेट से पांच यादृच्छिक तत्व नहीं। मुझे लगता है कि मुझे नींद की ज़रूरत है!: डी –

+5

इस तरह के समाधान के लिए बिल्कुल खोज कर मिला। तो क्यूएशन को गलत तरीके से जवाब देने का जवाब हमेशा बुरा नहीं होता :) – Zlatev

+0

क्या @Zlatev ने कहा। :) – SoreThumb

-1

क्यों सिर्फ यह नहीं, यह बहुत कुशल लगता है:

jQuery('li:random').slice(0, 5); 
+4

शायद क्योंकि jQuery में कोई 'यादृच्छिक' चयनकर्ता नहीं है [अब]? –

2
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; 
    } 
    }); 
8

मैं इस उद्देश्य के लिए एक छोटे से स्क्रिप्ट बनाया है का उपयोग करना। यह पहले jQuery तत्वों की सरणी की एक यादृच्छिक रूप से शफल और कटा हुआ प्रति बनाकर किया जाता है, और फिर उन सभी तत्वों को फ़िल्टर कर रहा है जो दोनों सरणी में मौजूद नहीं हैं।

आप इसके बारे में http://www.afekenholm.se/jquery-rand पर पढ़ सकते हैं। यहाँ स्क्रिप्ट है:

/** 
* jQuery.rand v1.0 
* 
* Randomly filters any number of elements from a jQuery set. 
* 
* MIT License: @link http://www.afekenholm.se/license.txt 
* 
* @author: Alexander Wallin (http://www.afekenholm.se) 
* @version: 1.0 
* @url: http://www.afekenholm.se/jquery-rand 
*/ 
(function($){ 
    $.fn.rand = function(k){ 
     var b = this, 
      n = b.size(), 
      k = k ? parseInt(k) : 1; 

     // Special cases 
     if (k > n) return b.pushStack(b); 
     else if (k == 1) return b.filter(":eq(" + Math.floor(Math.random()*n) + ")"); 

     // Create a randomized copy of the set of elements, 
     // using Fisher-Yates sorting 
     r = b.get(); 
     for (var i = 0; i < n - 1; i++) { 
      var swap = Math.floor(Math.random() * (n - i)) + i; 
      r[swap] = r.splice(i, 1, r[swap])[0]; 
     } 
     r = r.slice(0, k); 

     // Finally, filter jQuery stack 
     return b.filter(function(i){ 
      return $.inArray(b.get(i), r) > -1; 
     }); 
    }; 
})(jQuery); 
संबंधित मुद्दे