2011-07-18 58 views
5

我在iframe中有一個富文本編輯器,designMode爲小塊文本進行語法高亮顯示。我希望它更新keyup上的突出顯示,但與DOM混淆會導致框架模糊,因此,每次按下某個鍵時,脫字符號都會消失,而且您無法再鍵入。如果解析器可以記住插入符號的位置,那麼這不會成爲問題,然後重新調整iframe並替換插入符號。我已閱讀getSelection()及其親屬,但顯然onkeyup刪除了選擇,至少在Chrome中 - 在onkeyup中調用getSelection()總是產生空選擇。有沒有解決的辦法?保存一個選擇以供將來在JS中使用

這是我有:

<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

這僅適用於Gecko瀏覽器嗎?你應該比功能測試更適合你。在'addRange(wind.range)'中,* wind *對象來自哪裏? – RobG

+0

這是一個編輯器,我正在編寫自己的Chrome瀏覽器,雖然理想的所有瀏覽器(IE除外)。至於風,我的錯誤 - 用於保持iframe的窗口對象的風,我才意識到在框架本身內部具有該功能會更容易。從上面移除;它不應該在那裏,儘管這不是錯誤。 – Monchoman45

回答

0

我會建議使用一些其他的代碼高亮。例如CodeMirror

+0

該腳本似乎沒有做我需要做的事情,我有我自己的解析器,我想使用它。這裏的問題是我需要知道是否可以在onkeyup偵聽器中保存一個範圍,或者有更好的方法來實現這一點。 – Monchoman45

相關問題