2011-07-18 14 views
5

में बाद में उपयोग के लिए चयन सहेजना मेरे पास डिज़ाइन मोड के साथ एक आईफ्रेम में एक समृद्ध टेक्स्ट एडिटर है जो टेक्स्ट के छोटे ब्लॉक के लिए सिंटैक्स हाइलाइटिंग करता है। मैं इसे कुंजीपटल पर हाइलाइटिंग अपडेट करना चाहता हूं, लेकिन डीओएम के साथ गड़बड़ करने से फ्रेम धुंधला हो जाता है, इस प्रकार हर बार जब आप एक कुंजी दबाते हैं तो कैरेट गायब हो जाता है और आप अब और टाइप नहीं कर सकते हैं। अगर कोई पार्सर याद रख सकता है कि कैरेट कहां है, और फिर आईफ्रेम को फिर से शुरू करें और कैरेट को प्रतिस्थापित करें तो यह कोई समस्या नहीं होगी। मैंने getSelection() और उसके रिश्तेदारों को पढ़ा है, लेकिन स्पष्ट रूप से ऑनकीप चयन को हटा देता है, कम से कम क्रोम में - getSelection() को ऑनकीप के अंदर कॉल करना हमेशा एक नल चयन उत्पन्न करता है। क्या इसके चारों ओर एक रास्ता है?जेएस

<iframe> 
    <html> 
     <head> 
      <script> 
       function parse() { 
        if(window.getSelection().type != 'None') { 
         var range = window.getSelection().getRangeAt(0); 
        } 
        var text = document.body.textContent; 
        //Parse text, output is stored in newtext 
        document.body.innerHTML = newtext; 
        document.body.focus(); 
        if(range) { 
         window.getSelection().removeAllRanges(); 
         window.getSelection().addRange(range); 
        } 
       } 
      </script> 
     </head> 
     <body onload="document.designMode = 'on'; document.onkeyup = parse;"> 
      Text entered appears here 
     </body> 
    </html> 
</iframe> 
+0

कौन सा संपादक आप उपयोग कर रहे हैं? क्या यह एक मौजूदा है या आप में से एक है? –

+1

क्या यह केवल गेको ब्राउज़र के लिए है? आपको फीचर परीक्षण होना चाहिए जितना आप हैं। * पवन * वस्तु 'addRange (wind.range)' से कहां से आती है? – RobG

+0

यह एक संपादक है जिसे मैं क्रोम में लिख रहा हूं, हालांकि आदर्श रूप से सभी ब्राउज़रों (आईई को छोड़कर) के लिए। हवा के लिए, मेरी गलती - हवा को आईफ़्रेम के लिए विंडो ऑब्जेक्ट को पकड़ने के लिए उपयोग किया जाता था इससे पहले कि मुझे एहसास हुआ कि फ़्रेम के अंदर फ़ंक्शन को आसान बनाना आसान होगा। ऊपर से हटाया गया; यह वहां नहीं होना चाहिए था हालांकि यह त्रुटि नहीं थी। – Monchoman45

उत्तर

0

मैं कुछ अन्य कोड हाइलाइटर का उपयोग करने की सिफारिश करेंगे:

यह है कि मैं क्या है। उदाहरण के लिए CodeMirror की तरह।

+0

वह स्क्रिप्ट ऐसा करने के लिए प्रतीत नहीं होती है जो मुझे करने की ज़रूरत है, मेरे पास मेरा स्वयं का पार्सर है जिसका मैं उपयोग करना चाहता हूं। यहां समस्या यह है कि मुझे यह जानने की ज़रूरत है कि क्या ऑनकीप श्रोता में एक श्रेणी को सहेजना संभव है, या यदि इसे पूरा करने का एक बेहतर तरीका है। – Monchoman45