2012-12-25 9 views
6

पट्टी नहीं है मैं एक wysiwyg संपादक फेरबदल कर रहा हूँ, और मैं एक आइकन जो h2 के पाठ का चयन पट्टी बनाने के लिए कोशिश कर रहा हूँ।जावास्क्रिप्ट: execCommand ("removeformat") h2 टैग

एक पिछले संस्करण में, निम्न आदेश पूरी तरह से काम किया:

oRTE.document.execCommand("removeformat", false, ""); 

लेकिन वर्तमान संस्करण में, हालांकि उस आदेश को सफलतापूर्वक, बोल्ड रेखांकन, इटैलिक्स के रूप में चयनित पाठ इस प्रकार के टैग से निकाल देता है, यह h2 टैग छोड़ देता है बरकरार।

(दिलचस्प बात यह execCommand("formatblock"...) सफलतापूर्वक h2 टैग पैदा करता है।)

मैं सोच रहा हूँ कि मैं execCommand त्याग और एक और तरीका खोजने के लिए जा रहा हूँ, लेकिन मैं यह भी सोच रहा हूँ कि यह एक हो जाएगा कोड की केवल 1 पंक्ति से बहुत अधिक! सुझावों के लिए आभारी होंगे।

उत्तर

3

इस प्रस्तावित W3C Editing APIs के अनुसार है। यह स्वरूपण तत्वों की सूची है, और H# तत्वों सूचीबद्ध नहीं हैं। इन्हें संरचनात्मक माना जाता है, न केवल स्वरूपण। यह UL या P दूर करने के लिए की तुलना में इन टैग हटाने के लिए किसी भी अधिक मतलब नहीं है।

+0

मुझे लगता है कि मैं अपने प्रश्न अधिक स्पष्ट करना चाहिए था: इसलिए मैं अब क्या करूँ? – oyvey

+0

आप विशिष्ट तत्वों को दूर करने की जरूरत है, उनके लिए खोज और उन्हें हटाने के लिए स्पष्ट डोम हेरफेर कार्यों का उपयोग। jQuery कोड की लाइनों की संख्या को कम करने में मदद कर सकते हैं। – Barmar

+1

मैंने यहां से अधिक विस्तृत उत्तर प्राप्त करने के लिए यहां पोस्ट किया है। और ध्यान रखें कि मुझे वर्तमान में हाइलाइट किए गए टेक्स्ट से केवल h2 टैग को हटाने की आवश्यकता है। – oyvey

4

आप अपने प्रारूप बदल सकते हैं div करने के लिए, यह सबसे अच्छा समाधान नहीं है, लेकिन यह काम करता है और यह कम है:

document.execCommand('formatBlock', false, 'div') 

भी चयनित पाठ से निकटतम माता पिता पाने के लिए यह अन्य समाधान नहीं है तो आप इसे खोलने कर सकते हैं , ध्यान दें कि यह < जैसे कुछ टैग ख > हो सकता है कि:

var container = null; 
if (document.selection) //for IE 
    container = document.selection.createRange().parentElement(); 
else { 
    var select = window.getSelection(); 
    if (select.rangeCount > 0) 
     container = select.getRangeAt(0).startContainer.parentNode; 
} 
$(container).contents().unwrap(); //for jQuery1.4+ 
1

मुझे लगता है कि आप रेंज वस्तु का उपयोग कर सकते हैं। आप वेब डेवलपर्स 3 संस्करण के लिए व्यावसायिक जावास्क्रिप्ट से पा सकते हैं। उस किताब से अध्याय 12 (12.4) और अध्याय 14 (14.5) ...

एक उदाहरण:

var selection = frames["richedit"].getSelection(); 

var selectedText = selection.toString(); 

var range = selection.getRangeAt(0); 

var span = frames["richedit"].document.createElement("span"); 
span.style.backgroundColor = "yellow"; 
range.surroundContents(span); 
संबंधित मुद्दे