您的位置:首页 > Web前端 > JavaScript

JavaScript 中在光标处插入添加文本标签节点 详细方法

2015-05-07 15:10 555 查看
正确的方法是正确运用Selection对象和Range对象,实现在光标当前位置插入文本或结点。但是这两个对象在IE和标准的DOM方式的运用方法是不同的。 

思路:首先获得用户的选区(光标当前位置可理解成起始和终止位置一样的选区)。然后,从Selection对象转成Range对象。目的是利用Range对象的方法插内容进去。最后,插入动作结束后将光标移到插入内容的后面。 

Html代码  


var sel = win.document.selection; //IE  

var sel = win.getSelection(); //DOM  

  

var range = sel.createRange(); // IE下  

var range = sel.getRangeAt(0); // DOM下  

  

if(range.startContainer){ // DOM下  

    sel.removeAllRanges(); // 删除Selection中的所有Range  

    range.deleteContents(); // 清除Range中的内容  

    // 获得Range中的第一个html结点  

    var container = range.startContainer;  

    // 获得Range起点的位移  

    var pos = range.startOffset;  

    // 建一个空Range  

    range = document.createRange();  

    // 插入内容  

    var cons = win.document.createTextNode(",:),");  

      

    if(container.nodeType == 3){// 如是一个TextNode  

        container.insertData(pos, cons.nodeValue);  

        // 改变光标位置  

        range.setEnd(container, pos + cons.nodeValue.length);  

        range.setStart(container, pos + cons.nodeValue.length);  

    }else{// 如果是一个HTML Node  

        var afternode = container.childNodes[pos];  

        container.insertBefore(cons, afternode);  

          

        range.setEnd(cons, cons.nodeValue.length);  

        range.setStart(cons, cons.nodeValue.length);  

    }  

    sel.addRange(range);  

}else{// IE下  

    var cnode = range.parentElement();  

    while(cnode.tagName.toLowerCase() != “body”){  

        cnodecnode = cnode.parentNode;  

    }  

    if(cnode.id && cnode.id==”rich_txt_editor”){  

        range.pasteHTML(",:),");  

    }  

}  

win.focus();  

innerHTML 和 pasteHTML 区别 
innerHTML 是一个属性,可以取得或者设定该元素内的 HTML 内容,可以是任意能包含 HTML 子节点的元素都使用它 

pasteHTML()是一个方法,在指定的文字区域内替换该区域内的文本或者HTML,该方法必须应用于一个 createTextRange() 或者 document.selection.createRange() 创建的区域上

Js代码  


var oRange = document.selection.createRange();  

        if(oRange.text!=''){  

            var oHtml = '<a href="#" target=_blank>oRange.text</a>';  

            oRange.pasteHTML(oHtml);  

        }  

 

分类: javascript
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: