2009-10-15 5 views
21

मेरे पास एक HTML दस्तावेज़ में एक बिंदु के निर्देशांक (एक्स, वाई) हैं। मैं कैसे निर्धारित करूं कि उन निर्देशांकों पर डोम नोड क्या है?मुझे डीओएम नोड कैसे मिलता है जो किसी दिए गए (एक्स, वाई) स्थिति पर है? (परीक्षण मारा)

कुछ विचार:

  • वहाँ एक डोम परीक्षण समारोह है कि मैं याद किया, जो एक बिंदु (एक्स, वाई) लेता है और वहाँ DOM एलीमेंट रिटर्न मारा है?
  • क्या तत्व तत्व खोजने के लिए DOM तत्व पेड़ को चलाने का कोई प्रभावी तरीका है? ऐसा लगता है कि यह बिल्कुल तैनात तत्वों के कारण मुश्किल होगा।
  • क्या किसी दिए गए (एक्स, वाई) स्थिति में किसी ईवेंट को अनुकरण करने का कोई तरीका है जैसे ब्राउज़र एक ईवेंट ऑब्जेक्ट बनाने के समाप्त होता है जिसमें तत्व के लिए पॉइंटर होता है?

(पृष्ठभूमि:। मैं एक देशी आवेदन मैं संदर्भ मेनू क्यूटी विजेट डोम नोड है कि माउस खत्म हो गया है के आधार पर प्रदान भिन्न करने की कोशिश कर रहा हूँ में क्यूटी के QWebView embedding हूँ, लेकिन क्यूटी 4.5 हिट नहीं कर सकते हैं एक डीओएम तत्व का परीक्षण करें, हालांकि यह कार्यक्षमता 4.6 में आ रही है। इसलिए मुझे आशा है कि मैं समन्वय को जावास्क्रिप्ट में टॉस कर सकता हूं और डीओएम एपीआई के साथ हिट परीक्षण कर सकता हूं।)

धन्यवाद!

उत्तर

22

जब तक आपके उपयोगकर्ताओं सफारी, क्रोम या ओपेरा के पुराने संस्करण उपयोग नहीं कर रहे, तब तक आप भाग्यशाली हैं:

दस्तावेज़ से तत्व देता है: document.elementFromPoint(x, y) (MSDN ref, Mozilla ref, QuirksMode article) का उपयोग ... जो शीर्षतम तत्व है जो दिए गए बिंदु के नीचे स्थित है।

यदि आपको पुराने ब्राउज़र का समर्थन करने की आवश्यकता है, तो मैं आपके सुझावों के अलावा कई विकल्पों के बारे में नहीं सोच सकता (पूरे डोम को पार करें, तत्व की स्थिति और आकार को देखकर देखें और उनमें से कोई भी आपके (x, वाई))।

मुझे नहीं लगता कि घटना सिमुलेशन काम करेगा लेकिन यह एक दिलचस्प विचार है। इवेंट प्रेषण की मेरी समझ यह है कि आप उस लक्ष्य को निर्दिष्ट करते हैं जिस पर ईवेंट है, जो ठीक है जिसे आप पहले स्थान पर ढूंढने की कोशिश कर रहे हैं।

+2

बिल्कुल सही! elementFromPoint वेबकिट में काम करता है, जो मैं एम्बेड कर रहा हूं .. निर्दोष जीत! – Geoff

1

आईई में document.body.componentFromPoint(x,y) मौजूद है। मुझे नहीं पता कि क्रॉस ब्राउज़र कार्यान्वयन है या नहीं।

+1

घटक FromPoint नोड वापस नहीं करता है। –

1

यह शायद सबसे अच्छा समाधान नहीं है, लेकिन आप अपने एक्स और वाई पदों वाले पूर्वजों के समन्वय खोजने के साथ शुरू होने वाले डोम पेड़ को पार कर सकते हैं और जल्दी से आपके समन्वय वाले पत्ते नोड तक पहुंच सकते हैं। क्रॉस ब्राउज़र तरीके से नोड की स्थिति प्राप्त करने के लिए आप जेएस टूलकिट देख सकते हैं। एक जिसका मैंने उपयोग किया है वह डोजो है। dojo._getMarginBox here

पर
1
document.elementFromPoint(x,y) 

IE के लिए Firefox 3 के लिए here और here प्रलेखित एक नजर डालें, लेकिन क्रॉस-ब्राउज़र अंतर के लिए quirksmode देखते हैं।

0

आप इसके लिए jQuery का उपयोग कर सकते हैं। मैं क्लिक इवेंट में सभी आवश्यक डोम तत्वों को बांध दूंगा, इससे मुझे क्लिक पर उचित डोम ऑब्जेक्ट के साथ-साथ mouse position भी मिल जाएगा।

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