2011-01-21 9 views
6

मेरे पास ऐसा लगता है जो मुझे लगता है कि एक सीधा सवाल होना चाहिए; मुझे जल्दी से स्पष्ट करता हूं:मैं जावास्क्रिप्ट में एक नोडलिस्ट को पुन: व्यवस्थित/क्रमबद्ध कैसे कर सकता हूं?

मेरी जावास्क्रिप्ट में food.xml साथ में पढ़ा जाता है:

getMenuXml.open("GET","food.xml",false); 
getMenuXml.send(); 
xmlDoc=getMenuXml.responseXML; 
xmlFoodList = xmlDoc.getElementsByTagName("food"); 
तो

कि अब मैं सभी खाद्य तत्वों के साथ एक NodeList xmlFoodList है। अब तक बहुत बढ़िया समस्या यह है कि मैं अंदर <category> तत्व के आधार पर नोड्स को सॉर्ट करना चाहता हूं। मैं पढ़ सकते हैं कि साथ:

xmlFoodList[i].getElementsByTagName("category")[0].childNodes[0].nodeValue 
मेरी कोड में

बाद में, खाद्य पदार्थों की सूची में दिखाई देते हैं तथा आपकी अपेक्षानुसार, मैं एक ही श्रेणी के भोजन एक साथ सूचीबद्ध होना चाहते हैं। तो, मेरा सवाल है: मैं अपनी श्रेणी के आधार पर xmlFoodList में नोड्स को कैसे पुन: व्यवस्थित कर सकता हूं?

नोट्स: मैं food.xml नहीं बदल सकता, और मैं सॉर्टिंग करने के लिए अपना बाद का कोड संपादित नहीं करना चाहता क्योंकि सूची पॉप्युलेट हो गई है। मैं नोडलिस्ट को एक सरणी में परिवर्तित नहीं करना चाहता, क्योंकि मुझे बाद में बहुत सारे कोड को फिर से लिखना होगा। प्रदर्शन वास्तव में चिंता का अधिक नहीं है, इसलिए आप चाहते हैं कि क्लोन/नेस्टेड पाश के लिए स्वतंत्र महसूस करें। आपके समय के लिए धन्यवाद।

उत्तर

0

इसे देखें: Xml, xsl Javascript sorting। सबसे खराब स्थिति परिदृश्य, आप डेटा को उसी एक्सएमएल में बदलते हैं, लेकिन क्रमबद्ध होते हैं। जब तक आप रूपांतरण दंड का भुगतान कर रहे हों, तब तक आप इसे अगले रूप में जो कुछ भी हो, उसके लिए इसे अधिक रूप में उपयोगी बनाने पर विचार कर सकते हैं।

1

तैयार किए गए कार्यों को प्राप्त करने के लिए जावास्क्रिप्ट लाइब्रेरी का उपयोग करना एक अच्छा विचार है w.r.t नोड सूची संचालन जैसे पुन: क्रम, सॉर्टिंग, foreach आदि। मैं YUI-3 की अनुशंसा करता हूं, कृपया YUI-3 NodeList देखें।

+0

इसे – lisak

11

अगर आप उन्हें पहले एक सरणी में कनवर्ट आप NodeList के तत्वों आदेश कर सकते हैं:

var foods = xmlDoc.getElementsByTagName("food"); 
var foodsArray = Array.prototype.slice.call(foods, 0); 

तो फिर तुम sort विधि का उपयोग कर सकते हैं:

foodsArray.sort(function(a,b) { 
    var aCat = a.getElementsByTagName("category")[0].childNodes[0].nodeValue; 
    var bCat = b.getElementsByTagName("category")[0].childNodes[0].nodeValue; 
    if (aCat > bCat) return 1; 
    if (aCat < bCat) return -1; 
    return 0; 
}); 

इस पर बहुत निर्भर है आपकी एक्सएमएल स्कीमा हालांकि - अगर, उदाहरण के लिए, आपके पास ऐसे खाद्य पदार्थ थे जो एक से अधिक श्रेणियों में थे, तो उन्हें उपरोक्त कोड में पहली श्रेणी द्वारा क्रमबद्ध किया जाएगा।

+0

सॉर्ट करने के बारे में बहुत कुछ नहीं है, मुझे पता है कि यह पुराना है, लेकिन इससे मुझे इस मुद्दे के साथ बहुत मदद मिली। चूंकि मैंने अपने नोडेलिस्ट को सरणी में परिवर्तित नहीं किया था, इसलिए इसे क्रोम में ठीक तरह से सॉर्ट नहीं किया जा रहा था। मेरे पास आपके बहुत करीबी काम थे, और एक बार मैंने इसे परिवर्तित कर लिया, यह काम किया! आपका बहुत बहुत धन्यवाद! – illinoistim