2011-02-10 36 views
6

पर प्रक्रिया करने के लिए ऑब्जेक्ट आईडी के jQuery के साथ एक सरणी बनाना, मुझे कुछ जावास्क्रिप्ट मिला है जो AJAX खोज के बाद बैकएंड से लौटाई गई ऑब्जेक्ट पर आधारित ली बना रहा है। उपयोगकर्ता डिवाइस की खोज कर सकता है और जब चयनित होता है तो वे वर्तमान पृष्ठ (ली के रूप में) में जोड़े जाते हैं। प्रत्येक बार जब कोई नया ली बनाया जाता है, तो मैं उन वस्तुओं की आईडी भेजना चाहता हूं जो पहले ही चुने गए हैं।Django बैकएंड

जब ली बनाये जाते हैं, तो उनकी आईडी का नाम "डिवाइस - ###" होता है जहां ### डेटाबेस में डिवाइस की आईडी है, इसलिए मुझे उस भाग को बाहर करने की आवश्यकता है।

 var children = $('#temp_inventory').children(); 
     var count = children.length; 
     var devices = []; 
     var i = 0; 
     while (i<=count){ 
      devices[i] = children[i].id.substr(4); 
      i++; 
     }; 

मैं निम्नलिखित त्रुटि मिलती है:

Uncaught TypeError: Object #<HTMLLIElement> has no method 'attr' 

मैं भी यह गैर jQuery तरह से करने की कोशिश की:

devices[i] = children[i].id.substr(4); 

और

यहाँ जावास्क्रिप्ट कि मुझे समस्याओं दे रही है मैं इस त्रुटि के साथ समाप्त होता हूं:

Uncaught TypeError: Cannot read property 'id' of undefined 

जब मैं alert(children[i].id.substr(4)); में फेंकता हूं तो मुझे उस नंबर के साथ एक चेतावनी मिलती है जिसकी मुझे उम्मीद है।

+2

आपका jQuery संस्करण काम नहीं कर रहा है क्योंकि कारण 'बच्चों [i] 'वास्तविक तत्व * लौटाता है, न कि किसी jQuery ऑब्जेक्ट में लिपटे तत्व। कामकाज '$ (बच्चों [i]) होगा। Attr'। #जितना अधिक आप जानते हैं – sdleihssirhc

उत्तर

3

मुझे लगता है कि आप चाहते हो सकता है,

while (i<count){ 
    devices[i] = children[i].id.substr(4); 
    i++; 
}; 

अन्यथा पिछले यात्रा सरणी में अंतिम आइटम परे हो जाएगा।

एक मुद्दे के $.map()

var devices = $.map($('#temp_inventory').children(), function(elem) { 
    return elem.id.substr(4); 
}); 
4

भाग का उपयोग कर ऐसा करने का अधिक संक्षिप्त तरीके से शायद कि आपके पाश <= बजाय < का उपयोग करता है। शून्य-आधारित इंडेक्स का उपयोग करने वाली सूची में अंतिम आइटम याद रखें length - 1 है।

आईडी के ऐरे बनाने के लिए, आप इसके बजाय map()(docs) विधि का उपयोग कर सकते हैं।

var devices = $('#temp_inventory').children().map(function() { 
    return this.id.substr(4); 
}).get(); 

.map() विधि एक jQuery वस्तु (जो किसी सरणी जैसी वस्तु है) मान आप समारोह में लौट साथ भरता है।

फिर get()(docs) विधि आपको jQuery ऑब्जेक्ट की बजाय उन मानों का ऐरे देता है।

आप toArray()(docs) विधि का भी उपयोग कर सकते हैं जो एक ही चीज करता है।

var devices = $('#temp_inventory').children().map(function() { 
    return this.id.substr(4); 
}).toArray(); 
संबंधित मुद्दे