2010-05-08 5 views
8

मैंने थोड़ी देर के लिए चारों ओर देखा है, लेकिन ऐसा करने का एक आसान तरीका प्रतीत नहीं होता है। jQuery कम से कम मदद नहीं करता है, ऐसा लगता है कि चयन या डोम श्रेणियों के लिए पूरी तरह से कोई समर्थन नहीं है। कुछ जो मैंने आशा की थी उतनी सरल होगी जितनी $.selection.filter('img') रेंजों और browser implementation inconsistencies (हालांकि ierange) में तत्वों को मैन्युअल रूप से समझाते हुए कोड की दर्जनों लाइनों के साथ ही करने योग्य प्रतीत होती है। कोई अन्य शॉर्टकट्स?एक पाठ चयन के अंदर सभी <img> टैग कैसे प्राप्त करें?

+0

यह कुछ की तरह बदबू आ रही है आप प्रति-ब्राउज़र मुझे डर लग रहा बाहर काम करना होगा ... –

+1

आप टैग के साथ क्या करने की जरूरत? उन्हें संशोधित करें? या केवल पढ़ा? अगर केवल पढ़ने के लिए, आंतरिक HTML पर एक regexp खोज को – ariel

उत्तर

2
var fragment = getSelection().getRangeAt(0).extractContents(); 

चयन में नोड्स हटा दिया जाएगा और एक DocumentFragment में लौट आए, और अब आप करते हैं जैसे आप किसी भी तत्व की तरह fragment की childNodes पहुँच सकते हैं।

+3

कुछ बिंदुओं पर काम करना चाहिए: सबसे पहले, आप 'cloneContents()' से कोष्ठक को याद कर चुके हैं। दूसरा, परिवर्तनीय नाम भ्रामक है क्योंकि परिणामस्वरूप ऑब्जेक्ट एक 'दस्तावेज़फ्रेगमेंट' है, न कि रेंज। तीसरा, इस खंड में कोई भी चित्र मूल श्रेणी में पाए गए लोगों के क्लोन होंगे, इसलिए उपयोगी होने की संभावना नहीं है। चौथा, यह आईई में काम नहीं करेगा। –

+0

@ टिम डाउन, क्षमा करें, यह थोड़ी देर हो चुकी थी;)। अंक 1, 2 और 3 के लिए, मैंने आपके द्वारा उल्लिखित समस्याओं को ठीक कर दिया है (बहुत बहुत धन्यवाद)। चौथा, आपके आईई दर्शकों (कॉर्पोरेट इंटर्नल्स) के महत्व के आधार पर मैं या तो कह सकता हूं * "आईई हैक्स" * या * "तो?" * –

+0

जैसा कि नीचे बताया गया है, निकालें सामग्री दस्तावेज़ को संशोधित करती है, जो एक वांछित साइड इफेक्ट नहीं था । मैं इसका उपयोग कर समाप्त हुआ: 'var d = document.createElement (" div "); d.appendChild (। window.getSelection() getRangeAt (0) .cloneContents()); var img = $ ("img", d); '। चूंकि मुझे तत्वों को संशोधित करने की आवश्यकता नहीं थी, इसलिए मैंने बोर्तओ के रेगेक्स सुझाव का भी उपयोग किया होगा। –

1

यह चयन के लिए किसी समर्थन की कमी पूरी तरह से करने लगता है या डोम पर्वतमाला

हाँ, यह करने के लिए कारण आईई चयन और डोम रेंज का समर्थन नहीं करता है। आप आईई की गैर-मानक 'टेक्स्टरेंज' ऑब्जेक्ट्स के शीर्ष पर एक एब्स्ट्रक्शन लेयर बना सकते हैं, लेकिन टेक्स्टरेंज द्वारा उजागर किए गए बेहद खराब इंटरफ़ेस के कारण यह कठिन, धीमा और जटिल है कि यह एक पूर्ण-पुस्तकालय है। उदाहरण देखें। this one

+0

ओपी ने प्रश्न में आईरेंज का उल्लेख किया है। –

+0

हम्म, अजीब ... मैं शपथ ले सकता था कि पहले वहां नहीं था! – bobince

+0

एक हल्का नोट पर, क्या यह आश्चर्यजनक है? क्या आईई * किसी भी * आधुनिक प्रौद्योगिकियों का समर्थन करता है? हैलो, एक्सएचटीएमएल? कोई है वहां? ;) –

1
$("img", window.getSelection().getRangeAt(0).extractContents()); 

दुर्भाग्य से आप IE 6/7/8 समर्थन करने के लिए ऊपर उल्लिखित IERange पुस्तकालय का उपयोग करना होगा।

उल्लेखनीय: DOM Range will be implemented in IE9 और देखते हैं talks of new selection APIs in HTML5

+0

काम नहीं लग रहा है। परिणामी वस्तु का आकार() हमेशा शून्य होता है। इसके अलावा, निकालें सामग्री दस्तावेज़ को संशोधित करता है (यह * एक रेंज की सामग्री को दस्तावेज़ स्वरूप में बदलता है)। –

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