Javascript 保存所选内容供以后在JS中使用

Javascript 保存所选内容供以后在JS中使用,javascript,html,selection,textselection,getselection,Javascript,Html,Selection,Textselection,Getselection,我有一个iframe中的富文本编辑器,它具有设计模式,可以对小文本块进行语法高亮显示。我希望它能在keyup上更新高亮显示,但是弄乱DOM会导致帧模糊,因此每次你按下一个键时插入符号就会消失,你就不能再键入了。如果解析器能够记住插入符号的位置,然后重新聚焦iframe并替换插入符号,那么这就不会是问题。我已经阅读了getSelection()及其相关内容,但显然onkeyup删除了选择,至少在Chrome中是这样的-在onkeyup中调用getSelection()总是产生空选择。有办法解决这个

我有一个iframe中的富文本编辑器,它具有设计模式,可以对小文本块进行语法高亮显示。我希望它能在keyup上更新高亮显示,但是弄乱DOM会导致帧模糊,因此每次你按下一个键时插入符号就会消失,你就不能再键入了。如果解析器能够记住插入符号的位置,然后重新聚焦iframe并替换插入符号,那么这就不会是问题。我已经阅读了
getSelection()
及其相关内容,但显然onkeyup删除了选择,至少在Chrome中是这样的-在onkeyup中调用
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>

函数解析(){
if(window.getSelection().type!=“无”){
var range=window.getSelection().getRangeAt(0);
}
var text=document.body.textContent;
//解析文本,输出存储在newtext中
document.body.innerHTML=newtext;
document.body.focus();
如果(范围){
getSelection().removeAllRanges();
window.getSelection().addRange(范围);
}
}
此处显示输入的文本

我建议使用其他一些代码高亮显示。例如。

不确定您是否愿意使用JS框架,但mootools有一些非常漂亮的选择实用程序(例如),您使用的是哪个编辑器?这是现有的还是您自己的?这只是Gecko浏览器的吗?您应该比现在更多地进行功能测试。在
addRange(wind.range)
中,wind对象来自何处?这是我自己用Chrome编写的编辑器,不过最适合所有浏览器(IE除外)。至于wind,我的错误是wind在我意识到在框架内部更容易实现该功能之前,就已经为iframe保留了window对象。从上面移除;虽然不是错误,但它不应该在那里。事实证明onkeyup导致getSelection返回空选择,至少在Chrome中是这样。有没有办法解决这个问题?如果我是你,我会使用输入框,而不是Iframe。这个脚本似乎无法完成我需要它完成的任务,我有自己的解析器想要使用。这里的问题是我需要知道是否有可能在onkeyup侦听器中保存一个范围,或者是否有更好的方法来实现这一点。