2013-05-16 6 views
8

क्या यह एक और संक्षिप्त तरीके से किया जा सकता है?क्या सरणी में प्रत्येक तत्व के चारों ओर jQuery को लपेटने का कोई त्वरित तरीका है?

var src = $('div'); 
var dest = []; 

for (var i = 0; i < src.length; i++) 
    dest[i] = $(src[i]); 

मैं केवल इस के बारे में सोच सकते हैं, जो अभी भी बहुत वर्बोज़ है:

var dest = []; 
$('div').each(function() { dest.push($(this)); }); 

jQuery कुछ भी इस मामले के लिए बेहतर देता है? मुझे यह नहीं मिल रहा है।


टिप्पणी में आवर्ती कुछ प्रश्नों का समाधान करने के लिए:

src[i] पहले से ही एक jQuery वस्तु है, jQuery(src[i]) बुला कुछ भी नहीं है।

नहीं, यह किसी भी jQuery रैपिंग के बिना, एक साधारण डोम नोड है।

जिज्ञासा से बाहर, यह बिल्कुल क्यों है?

क्योंकि बाद में मुझे प्रत्येक तत्व के साथ अलग-अलग मिश्रण करने की आवश्यकता होगी। उदाहरण के लिए, मुझे सबसे ऊंचे को खोजने के लिए उन सभी पर जाने की जरूरत है, फिर बाकी को एक ही ऊंचाई पर सेट करें। उसके बाद मुझे अपनी सभी चौड़ाई प्राप्त करने और उस पर आधारित कुछ लेआउटिंग करने की आवश्यकता है (इसलिए प्रत्येक तत्व को अन्य तत्वों की चौड़ाई के आधार पर x xy निर्देशांक प्राप्त होते हैं)। आदि

इन सभी जोड़तोड़ और अधिक आसानी से किया जाता है अगर मैं jQuery द्वारा प्रदान की आशुलिपि कार्यों का उपयोग कर सकते हैं, लेकिन यह है कि इसका मतलब है कि मैं व्यक्तिगत रूप से प्रत्येक तत्व रैप करने के लिए की जरूरत है ($('div') केवल एक आवरण के आसपास उन सभी को लौटे)। और चूंकि मुझे हर बार कई तत्वों की यात्रा करने की ज़रूरत है, इसलिए मैं उनमें से प्रत्येक को केवल एक बार लपेटकर प्रदर्शन में वृद्धि करना चाहता हूं, हर यात्रा पर नहीं।

+0

'src है [i] 'पहले से ही एक jQuery ऑब्जेक्ट है, 'jQuery (src [i]) को कॉल करना' कुछ भी नहीं करता है। – Barmar

+0

'$ .map ($ ('div'), फ़ंक्शन (वैल, i) {वापसी $ (वैल);}' शायद? –

+1

@ बामार - नहीं, यह एक वेनिला डोम ऑब्जेक्ट है। –

उत्तर

8

यह ठीक है map() के लिए है। आप प्रत्येक तत्व पर लूपिंग कर रहे हैं और तत्व में एक फ़ंक्शन लागू करते हैं और इसे एक नए ऐरे पर दबाते हैं।

var wrapped = $.map($('div'), function(){ return $(this); }); 

या पठनीयता

var wrapped = $.map($('div'), function(val, i) { 
    return $(val); 
}); 
+4

एफडब्ल्यूआईडब्ल्यू, 'jQuery.fn'] पर एक ['map()' भी है (http://api.jquery.com/map/), इसलिए '$ (' div ')। नक्शा (फ़ंक्शन (v, i)); 'भी काम करता है। – Matt

+0

@ मैट - स्वीट। मुझे jQuery ऑब्जेक्ट्स की एक सरणी लपेटने वाला एक jQuery ऑब्जेक्ट मिलता है! उत्तम! :) –

1

jQuery वस्तु को आप नहीं करना चाहिए फिर से परिवर्तित डोम नोड के लिए।

आप कुछ इस तरह की कोशिश करनी चाहिए,

var src = $('div'); 
var dest = []; 

for (var i = 0, l = src.length; i < l; i++) { 
    dest[i] = src.eq(i); 
} 

console.log(dest); 

या और भी बेहतर,

var src = document.getElementsByTagName('div'); 
var dest = []; 
for (var i = 0, l = src.length; i < l; i++) { 
    dest[i] = $(src[i]); 
} 
console.log(dest); 


मैं js पर्फ़ पर बहुत अच्छा नहीं हूँ, लेकिन यहाँ एक परीक्षण http://jsperf.com/eq-vs-vs-vanilla

+0

अच्छा! धन्यवाद! :) –

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

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