2011-07-01 17 views
12

document.getElementsByTagName मुझे एक नोडलिस्ट ऑब्जेक्ट लौटा दिया।क्या हम सीधे नोड्स को नोडलिस्ट से निकाल सकते हैं?

मैं कुछ आइटम हटाने के लिए चाहते हैं

वहाँ यह करने के लिए एक रास्ता है (मान लीजिए कि मैं NodeList से पहले आइटम को दूर करना चाहते हैं)? (मुझे पता है कि मैं मैन्युअल रूप से सभी नोड्स को सरणी में प्रतिलिपि बना सकता हूं लेकिन मैं ऐसा नहीं करना चाहता हूं अगर नोडलिस्ट हमारे पास पहले से ही इसमें तत्वों को निकालने के लिए कार्य करता है)

मुझे पता है कि वस्तुओं को हटा रहा है एक NodeList प्रदर्शन पर कोई प्रभाव नहीं है (और किसी भी ब्राउज़र-प्रदर्शन ताज़ा या ऐसा सामान का कारण नहीं होना चाहिए, मैं बस इच्छा नहीं है कि NodeList उद्देश्य यह है कि नोड के लिए एक referennce धारण करने के लिए)

वहाँ ऐसा करने के लिए एक रास्ता है यह? (या क्या मुझे नोडलिस्ट में सभी वस्तुओं को एक सरणी में कॉपी करने के लिए मजबूर किया गया है?)

उत्तर

17

जैसा कि आप specification में देख सकते हैं, सूची में से किसी तत्व को निकालने का कोई तरीका नहीं है।

यह वैसे भी समझ में नहीं आता है। यह NodeListलाइव है, जिसका अर्थ है कि जब भी आप किसी निश्चित संपत्ति तक पहुंचते हैं तो DOM फिर से खोजा जाता है, उदा। lengthMDC से:

(...) लौटाई गई सूची लिस लाइव है, जिसका अर्थ है कि यह स्वचालित रूप से स्वचालित रूप से डोम पेड़ के साथ अपडेट होता है। (...)

तो तुम करने के लिए है एक सरणी में नोड्स की प्रतिलिपि बनाएँ।

Array विधियों का उपयोग करके आप इसे आसानी से कर सकते हैं। जैसे इसे कॉपी और सीधे पहला तत्व निकालें:

var nodes = [].slice.call(elements, 1); 

NodeList एक सरणी की तरह वस्तु है। इसलिए हम call[docs] का उपयोग कर, सरणी कार्यों को लागू कर सकते हैं। [].sliceslice[docs] विधि का संदर्भ प्राप्त करने के लिए सिर्फ एक शॉर्टेंड है।

+11

चेतावनी: यह एक पुराना उत्तर है। वर्तमान में, नोडलिस्ट हमेशा लाइव नहीं है। जैसे। querySelectAll() एक गैर-लाइव नोडलिस्ट देता है। – aMarCruz

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