iframe更改选择

时间:2012-08-13 00:03:24

标签: javascript iframe rte designmode

我正在创建一个非常简单的rte,这是我的问题,我可以在iframe中获取所选文本(designmode = true)但是我无法更改它。

HTML

<a onclick="change();">change</a>
<iframe id="textEditor"></iframe>

脚本文件

function $(Str1){return document.getElementById(Str1);}
rte()
{
    var texteditor=$('texteditor');
    textEditor.document.designMode="on";
    textEditor.document.body.contentEditable="True";
    textEditor.document.open();
    textEditor.document.close();
    textEditor.focus();

}
function change()
{
    var userSelection,range;
    if (window.frames['textEditor'].getSelection)
    {
        userSelection=window.frames['textEditor'].getSelection();
    }
    else if(document.frames['textEditor'].selection)
    {
        userSelection=document.frames['textEditor'].selection.createRange();
    }
    if(userSelection.getRangeAt)
    {
        range=userSelection.getRangeAt(0);
    }
    else
    {
        range=document.frames['textEditor'].createRange();
        range.setStart(userSelection.anchorNode,userSelection.anchorOffset);
        range.setEnd(userSelection.focusNode,userSelection.focusOffset);
    }
    range="<div style='color:#f00;'>" + range + "</div>";
}
window.onload = rte();

2 个答案:

答案 0 :(得分:0)

可能是rte()函数的第一行引用了'texteditor'而不是'textEditor'吗?

答案 1 :(得分:0)

我找到了一种方法来处理它,改变功能应该是那样的

function change()
    if(document.selection)
    {
        sText=textEditor.document.selection.createRange();
        sText.execCommand("createlink","","");
        temp=sText.parentElement().innerHTML;
        newNode=textEditor.document.createElement("h1");
        replacement=sText.parentElement().replaceNode(newNode);
        newNode.innerHTML=temp;
    }
    else if(document.getSelection)
    {
        sText=textEditor.window.getSelection();
        myTag=textEditor.document.createElement("div");
        myTag.setAttribute("class","bold");
        sText.getRangeAt(0).surroundContents(myTag);
    }
}