2010-09-01 16 views
13

मैं TinyMCE के लिए एक साधारण छवि ब्राउज़र बनाने की कोशिश कर रहा हूं जिसका उपयोग मैं अपने सीएमएस में कर रहा हूं। इस के हिस्से के रूप में मुझे यह पता लगाने की आवश्यकता है कि उपयोगकर्ता ने एक मौजूदा छवि का चयन किया है, इसलिए मैं "छवि फ़ॉर्म चुनने" के बजाय "संपादन" फ़ॉर्म प्रदर्शित कर सकता हूं।jQuery का उपयोग कर चर के भीतर तत्वों का चयन कैसे करें?

var selected_html = ed.selection.getContent(); 
var $elem = $(selected_html); 
console.log($elem); 

पहले समारोह HTML की एक स्ट्रिंग के रूप में संपादक विंडो से उपयोगकर्ता चयनित पाठ देता है। मैं फिर jQuery का उपयोग करना चाहूंगा (हालांकि सादा जावास्क्रिप्ट बस ठीक है) यह जांचने के लिए कि क्या इस स्ट्रिंग में संपादन के लिए स्रोत और शीर्षक विशेषताओं को पकड़ने से पहले एक आईएमजी टैग है या नहीं।

अब मुझे एक ऑब्जेक्ट में बदलने के लिए HTML प्राप्त करने के लिए मिला है। लेकिन इसके बाद मैं इसे img तत्व के लिए खोज नहीं कर सकता। इस (How to manipulate HTML within a jQuery variable?) को पढ़ने के बाद मैंने कोशिश की:

$elem.find('img'); 

लेकिन यह सिर्फ एक "अनिर्धारित" वस्तु के रूप में बाहर आता है ...

मुझे लगता है कि मैं यहाँ कुछ काफी स्पष्ट याद कर रहा हूँ (देर हो रही है) , लेकिन एक घंटे के बाद भी मैं यह नहीं समझ सकता कि चयन से आईएमजी टैग कैसे पकड़ें। ।। :(

अग्रिम में बहुत धन्यवाद

+1

आपको 'अपरिभाषित' परिणाम प्राप्त करने के लिए आप क्या करते हैं? और क्या आप HTML ऑब्जेक्ट बनाने के लिए उपयोग किए जा रहे HTML का एक उदाहरण पोस्ट कर सकते हैं? – user113716

+0

मैं फिलहाल console.log (क्रोम का डीबगर) कर रहा हूं। जो कुछ भी मैं करता हूं, मैं एक ऑब्जेक्ट (एक __proto__?) के साथ समाप्त होता हूं जिसमें एक संदर्भ पैरामीटर "अपरिभाषित" और "img" का चयनकर्ता होता है। एचटीएमएल का चयन सीधे आगे है - बस एक आईएमजी टा, कुछ बोल्ड टेक्स्ट और एक आईएमजी टैग इत्यादि अगर मैं $ elem (कोड के पहले बिट में) लॉग करता हूं तो मुझे एक ऑब्जेक्ट मिलता है जिसमें सभी HTML नोड्स होते हैं कोड का चयनित बिट। तो थोड़ा सा ठीक काम करता है। लेकिन फिर मैं jQuery से सिर्फ आईएमजी तत्व लेने के लिए प्रबंधन नहीं कर सकता (console.log ($ elem.find ('img') के माध्यम से);)। यह हमेशा यह "अपरिभाषित" वस्तु देता है। – Fourjays

+0

'.find()' विधि आपके लिए ' 'नहीं मिलेगी। नीचे मेरा जवाब देखें। – user113716

उत्तर

25

क्योंकि <img> jQuery वस्तु की जड़ में है, तो आप .filter() बजाय .find() उपयोग करने के लिए की जरूरत है।

$elem.filter('img'); 

.filter() विधि, jQuery वस्तु के शीर्ष स्तर पर तत्व (रों) पर लग रहा है, जबकि .find() तत्वों शीर्ष स्तर तत्वों में से किसी में नेस्ट के लिए लग रहा है।

यदि आप पहले से सुनिश्चित नहीं हैं कि लक्षित तत्व कहां होगा, तो आप एचटीएमएल को एक रैपर <div> से खोज सकते हैं। इस तरह दिया गया HTML कभी भी शीर्ष पर नहीं होगा।

var selected_html = ed.selection.getContent(); 
var $elem = $('<div>').html(selected_html); 

var $img = $elem.find('img'); 
+0

बिल्कुल सही, धन्यवाद! पता था कि यह अंत में कुछ आसान होने जा रहा था। : पी – Fourjays

0

क्या वास्तव में अपने $elem वेरिएबल के अंदर है देखने की कोशिश बस एक console.log($elem) दोनों फ़ायरफ़ॉक्स और Firebug का उपयोग करने और आप काफी ठीक प्रबंधन करने के लिए सक्षम होना चाहिए करते हैं;!)

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