我也在等这类的问题!
我是用的IFrame期待中

解决方案 »

  1.   

    <script>
    function insertAtCursor(myField, myValue) {
    if (document.selection) {
    myField.focus();
    sel = document.selection.createRange();
    sel.text = myValue;
    }
    else if (myField.selectionStart|| myField.selectionStart == "0") {
    var startPos = myField.selectionStart;
    var endPos = myField.selectionEnd;
    myField.value = myField.value.substring(0, startPos)
    + myValue
    + myField.value.substring(endPos, myField.value.length);
    } else {
    myField.value += myValue;
    }
    }
    // calling the function
    //insertAtCursor(document.formName.fieldName, 'this value');</script> 
    <form>
    <textarea   id=demo>abcdef</textarea>
    <input   type=button   onclick=insertAtCursor(document.getElementById('demo'),"1234")   value=1 ID=Button1>
    <input   type=button   onclick=insertAtCursor(document.getElementById('demo'),"1234")   value=2 ID=Button2>
    </form>
      

  2.   


    <HTML>
    <HEAD>  
    <SCRIPT>  
    var JCaret = function(){????var m_oBindObj????= null;????????// 绑定进行 监控插入符号 的元素????
    ????var m_otmpRange = null;????var fnDoStore = function(){
    ????????m_otmpRange = document.selection.createRange().duplicate();????????if(m_otmpRange.parentElement() != m_oBindObj){
    ????????????m_otmpRange = null;
    ????????}
    ????}????var fnDoMove = function(rng, iStep){
    ????????rng.collapse(false);????????if(typeof(iStep) == "number")
    ????????????rng.move("character",iStep);????????// 万一移出界外,则聚焦前/末尾
    ????????if(rng.parentElement() != m_oBindObj){
    ????????????rng = m_oBindObj.createTextRange();
    ????????????rng.collapse( iStep>0 ? false : true);
    ????????}
    ????????rng.select();
    ????????m_otmpRange = document.selection.createRange().duplicate();
    ????}
    ????
    ????// 在两端附加 sBStr 前字串,  sEStr 后字串, iStep 向前移动 多少字
    ????this.appendStr = function(sBStr, sEStr, iStep){
    ????????if(m_oBindObj == null)
    ????????????return JCaret.NOBIND;????????var rng = (m_otmpRange == null) ? m_oBindObj.createTextRange() : m_otmpRange;
    ????????rng.text = sBStr + rng.text + sEStr;????????fnDoMove(rng, iStep);
    ????????????
    ????}
    ????
    ????// 在插入符处插入, sStr 插入的字串, iStep 向前移动 多少字
    ????this.insertStr = function(sStr, iStep){
    ????????if(m_oBindObj == null)
    ????????????return JCaret.NOBIND;????????var rng = (m_otmpRange == null) ? m_oBindObj.createTextRange() : m_otmpRange;
    ????????
    //********************** 修改为着这里,当采用右键菜单进行粘贴操作的时候,Document.Selection 里面的文本为粘贴的字串 ******//
    ????????if(this.isSelected() == false && (rng.text.length > 0))
    ????????????rng.text += sStr;
    ????????else
    ????????????rng.text = sStr;
    ????????
    ????????fnDoMove(rng, iStep);????}
    ????
    ????// 在插入符后接上 sStr , iStep 向前移动 多少字
    ????this.concatStr = function(sStr, iStep){
    ????????if(m_oBindObj == null)
    ????????????return JCaret.NOBIND;????????var rng = (m_otmpRange == null) ? m_oBindObj.createTextRange() : m_otmpRange;????????rng.text += sStr;????????????????????fnDoMove(rng, iStep);
    ????}????// 绑定元素
    ????this.bind = function(oObj){
    ????????if(typeof(oObj)=="object" && oObj.createTextRange){
    ????????????m_oBindObj = oObj;????????????m_oBindObj.attachEvent('onclick', fnDoStore);
    ????????????m_oBindObj.attachEvent('onkeyup', fnDoStore);
    ????????????m_oBindObj.attachEvent('onselect', fnDoStore);
    ????????}
    ????????else{
    ????????????return JCaret.NOTEXTOBJ;
    ????????}????}
    ????
    ????// 取消绑定
    ????this.unbind = function(){
    ????????if(m_oBindObj != null){
    ????????????m_oBindObj.detachEvent('onclick', fnDoStore);
    ????????????m_oBindObj.detachEvent('onkeyup', fnDoStore);
    ????????????m_oBindObj.detachEvent('onselect', fnDoStore);
    ????????????m_oBindObj = null;
    ????????}
    ????}????// 查看是否选择着字串
    ????this.isSelected = function(){
    ????????if(m_oBindObj == null)
    ????????????return JCaret.NOBIND;
    ????????var rng = document.selection.createRange();????????if(rng.parentElement() == m_oBindObj && rng.text.length > 0)
    ????????????return true;
    ????????return false;
    ????}
    }JCaret.NOBIND = new Error(0,"JCaret: 没有绑定 监控元素");
    JCaret.NOTEXTOBJ = new Error(0,"JCaret: 不是有效的可以进行 TextRange 操作的元素");</SCRIPT>  
    </HEAD>  
    <BODY>  <TEXTAREA NAME="box" ROWS="5" COLS="80" WRAP="soft">
    1
    2
    3</TEXTAREA>  
    <BR> 
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    var caret = new JCaret();????// 声明一个 插入符类caret.bind(box);????????????// 绑定到 box 元素中,监视他的 插入符行为
    //caret.unbind()function Ubb_B(){
    ????if(caret.isSelected()){????// 是否选择字串????????// 在选择的字串两边添加  ,并且光标将停留在 [/B]后面,不发生偏移
    ????????caret.appendStr("","");
    ????}
    ????else{????// 没有选择字串???????? // 在光标位置插入 ,并向前移动 [/B] 的字串长度位,则光标定位于 间
    ????????caret.insertStr("","[/B]".length * -1);
    ????}
    }//-->
    </SCRIPT><INPUT TYPE="button" VALUE="粗体 B" ONCLICK="Ubb_B()"> </BODY> 
    </HTML>