2012-10-19 16 views
5

फ़ॉलबैक अप्रासंगिक है। कृपया कोई पुस्तकालय नहीं।जेएस नोडलिस्ट में ऑब्जेक्ट ढूंढें?

हमारे पास एक डोम ऑब्जेक्ट संदर्भ है, हम obj पर कॉल करेंगे। यह वास्तव में एक घटना है। लक्ष्य।

हमारे पास एक नोड सूची है, हम nodes पर कॉल करेंगे, जिसे हम querySelectorAll और एक चर चयनकर्ता के साथ प्राप्त कर चुके हैं।

nodes में 1 या कई तत्व हो सकते हैं, और उनमें से प्रत्येक तत्व में बच्चे हो सकते हैं।

हमें यह निर्धारित करने की आवश्यकता है कि obj उन नोड तत्वों में से एक है, या उन नोड तत्वों के बच्चे तत्व हैं। हम यहां "मूल" ब्राउज़र कार्यक्षमता की तलाश में हैं, हम अपने स्वयं के for पाश लिख सकते हैं और इसे पूरा कर सकते हैं, हम विकल्पों की तलाश में हैं।

कुछ की तरह:

nodes.contains(obj) या nodes.indexof(obj)

नोड सूची पुन: प्राप्त करने के खिलाफ मैच के लिए के अन्य तरीकों को शामिल समाधान स्वीकार्य हैं, लेकिन मुझे नहीं पता कि वे क्या हो सकता है।

उत्तर

1

मुझे नहीं लगता कि इसके लिए एक अंतर्निहित डीओएम विधि है। आपको अपने NodeList को फिर से घुमाने की आवश्यकता होगी, और अपने तत्व के साथ समानता की जांच करें। एक और विकल्प Element.querySelectorAll का उपयोग अपने NodeList से प्रत्येक प्रथम-स्तर के तत्वों पर करना है (उदाहरण के लिए, अपने तत्व की आईडी की तलाश करना)। मुझे यकीन नहीं है कि कैसे (सराय) कुशल होगा, हालांकि।

+0

हाँ यह हमारे विचारों का वर्तमान स्कूल भी है। खैर, तरह ... ओबीजे एक event.target से है, इसलिए हम माता-पिता के माध्यम से पुन: प्रयास करेंगे, और मैचों चयनकर्ता का उपयोग करके हमारे परिवर्तनीय चयनकर्ता के खिलाफ मैच करेंगे। हम एक अंतर्निहित विधि भी ढूंढने में असमर्थ रहे हैं, लेकिन यह देखने के लिए कि क्या हम चूक गए हैं, कुछ महान दिमाग चुनना चाहते हैं। –

8

मुझे यकीन नहीं है कि यह नोडलिस्ट के पहले स्तर से परे खोज करेगा, लेकिन आप इस अभिव्यक्ति का उपयोग इसे पार करने के लिए बार-बार उपयोग कर सकते हैं और जांच सकते हैं कि तत्व 'ओबीजे' नोडलिस्ट 'नोड्स' में है या नहीं।

Array.prototype.find.call(style.childNodes, function(child) { 
    if(child.textContent.includes(drawer.id)) { 
    console.log(child); 
    } 
}); 

काम करने के लिए लगता है:

[].indexOf.call(nodes, obj) 
+0

यह फ्लैट नोड सूचियों के लिए पर्याप्त है – doABarrelRoll721

1

मैं कुछ इस तरह से किया था। तब बच्चा एक और एचटीएमएल नोड है, जिसे आप पसंद करते हैं, लेकिन आप इसे पसंद कर सकते हैं।

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