jquery

2011-09-05 10 views
10

में .Max() के समतुल्य क्या है। मैं सोच रहा था कि मिलान किए गए तत्वों की संपत्ति का अधिकतम मूल्य प्राप्त करने के लिए हम एक jquery कथन कैसे लिख सकते हैं।jquery

LINQ में

हम कहते हैं कुछ इस तरह:

var maxHeight = list.Max(a=> a.Height); 

क्या jQuery में ऐसा करने का सबसे अच्छा तरीका है? एक कंटेनर के अंदर पाठ तत्वों:

एक उदाहरण के रूप मान लीजिए कि हम सभी की अधिकतम संख्यात्मक मान का चयन करना चाहते हैं

var allInputs = $("#container :text"); 
// how to get the max of parseInt(item.val())? 
पाठ्यक्रम सभी तत्वों पर एक पाश होने के

एक विकल्प है, लेकिन मैं करने के लिए उत्सुक हूँ पता है कि jquery के साथ एक जादू है या नहीं।

सम्मान।

उत्तर

8

यहां सभी बातचीत और नेट में मेरी खोज के आधार पर हम कह सकते हैं कि (इस समय) .max() और .min() की गणना करने के लिए कोई मजबूत अंतर्निहित jquery तरीका नहीं है एक चयनकर्ता से मेल खाने वाले तत्वों की संपत्ति।

क्या इगोर सुझाव दिया मैं) आप (.max उपयोग करने की आवश्यकता है, तो आप अपने प्रोजेक्ट को जोड़ सकते हैं जो निम्नलिखित दो jQuery कार्य करता है और .min के साथ आया था से() कार्यक्षमताओं अधिक से अधिक:

$.fn.max = function(selector) { 
    return Math.max.apply(null, this.map(function(index, el) { return selector.apply(el); }).get()); 
} 

$.fn.min = function(selector) { 
    return Math.min.apply(null, this.map(function(index, el) { return selector.apply(el); }).get()); 
} 

// Usage: 

var maxWidth = $("a").max(function() {return $(this).width(); }); 
var minWidth = $("a").min(function() {return $(this).width(); }); 

एक डेमो यहाँ देखें: http://jsfiddle.net/NF7v7/3/

10

संभव समाधान का एक परिणाम यह करने के लिए map समारोह और उसके बाद Math.max उपयोग करने के लिए है: यह आवश्यक है

var values = $.map($("input:text"), function(el, index) { return parseInt($(el).val()); }); 
var max = Math.max.apply(null, values); 

यदि यह एक पंक्ति में लिखा जा सकता है।

बेला: http://jsfiddle.net/WuVLr/1/

अद्यतन:

वैकल्पिक रूप से आप इस तरह से map आवेदन कर सकते हैं:

var values = $("input:text").map(function(index, el) { return parseInt($(el).val()); }).get(); 
+0

क्यों '$ .map()' और 'नहीं .map()'? –

+0

उत्तर में जोड़ा गया, लेकिन यह बहुत कम –

+0

नहीं है यदि मैं [दस्तावेज़] (http://api.jquery.com/jQuery.map/) सही ढंग से पढ़ रहा हूं, सरणी जैसी वस्तुओं (जैसे '$ ('इनपुट : टेक्स्ट ') ') को $ .map' में पारित होने से पहले वास्तविक सरणी में परिवर्तित किया जाना है। दूसरी ओर '।नक्शा() 'विशेष रूप से jQuery वस्तुओं के लिए है। इसका तात्पर्य है कि '.map()' बेहतर विकल्प है ... –

0

यह एक सरणी का उपयोग कर उस के लिए एक गैर-प्रत्यक्ष समाधान हो सकता है:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
    <head> 
     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> 
     <script type="text/javascript"> 
      $(document).ready(function() { 
       var mySizes=new Array(); 
       $("input[type=text]").each(
        function(intIndex){ 
         mySizes[intIndex] = $(this).val().length; 
        }); 
       var largest = mySizes.sort(function(a,b){return a - b}).slice(-1); 
       alert("The maximun length is: " + largest); 
      }); 
     </script> 
    </head> 
<body> 
    <input type="text" value="Test"id="1"/> 
    <input type="text" value="Goodbye"id="2"/> 
    <input type="text" value="Bye"id="3"/> 
    <input type="text" value="Hello"id="4"/> 
    <input type="text" value="Hello world!"id="5"/> 
    <input type="text" value="Hi"id="6"/> 
</body> 
</html> 

सम्मान

0

मैं ओपन सोर्स प्रोजेक्ट के लेखक http://www.jinqjs.com का उपयोग jinqJs हूँ आप निम्न कर सकता है:

आप ऐसा करके अधिकतम मिल सकता है:

var result = jinqJs().from([2,5,4,6,7,8,3]).orderBy([{sort: 'desc'}]).top(1).select(); 

या ऐसा करने से न्यूनतम:

var result = jinqJs().from([2,5,4,6,7,8,3]).orderBy([{sort: 'desc'}]).bottom(1).select();