<!–

(adsbygoogle=window.adsbygoogle||[]).push({})

–>

(adsbygoogle=window.adsbygoogle||[]).push({})

<!–
–>

原文:https://blog.csdn.net/smartsmile2012/article/details/53642082

createDocumentFragment()用法: https://blog.csdn.net/qiao13633426513/article/details/80243058

html

<iframe id=\"editor\"  width=\"600px\" height=\"400px\" style=\"border:solid 1px;\"></iframe>
<input type=\"txt\" onclick=\"alert(getPosition(event.target))\"/>

js

    //初始化编辑器
function init() {
var ifr = document.getElementById(\"editor\");
var doc = ifr.contentDocument || ifr.contentWindow.document; // W3C || IE
doc.open();
doc.designMode=\"on\";
doc.contentEditable = true;
doc.write(\'<html><head><style>body{margin:3px; word-wrap:break-word; word-break: break-all; }</style></head><body>GoodNessEditor</body></html>\');
doc.close();
doc.addEventListener(\'paste\',function(e){
e.preventDefault();
posInsertTxt(e,\'插入的内容!\');
});
}
init();
//在光标位置插入内容
var posInsertTxt = (event, txt) => {
var element = event.target ? event.target : event;
var doc = element.ownerDocument || element.document;
var win = doc.defaultView || doc.parentWindow;
var sel;
if (typeof win.getSelection != \"undefined\") {//谷歌、火狐
sel = win.getSelection();
if (sel.rangeCount > ) {//选中的区域
var range = win.getSelection().getRangeAt();
range.deleteContents();
var el = document.createElement(\"div\");
el.innerHTML = txt;
//createDocumentFragment 创建虚拟的节点对象,在创建之初是空的,在把一个DocumentFragment节点插入文档树时,插入的不是DocumentFragment自身,而是它的所有子孙节点
var frag = document.createDocumentFragment(), lastNode;
if (el.firstChild) {
//这里在虚拟节点位置加入的是 文本节点,不是元素节点
lastNode = frag.appendChild(el.firstChild);
}
//在范围初插入节点
range.insertNode(frag);
if (lastNode) {
range = range.cloneRange();
range.setStartAfter(lastNode);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
}
}
} else if ((sel = doc.selection) && sel.type != \"Control\") {//IE < 9
var textRange = sel.createRange();
textRange.pasteHTML(txt);
}
}

<!–

(adsbygoogle=window.adsbygoogle||[]).push({})

–>
<!–

–>

(adsbygoogle=window.adsbygoogle||[]).push({})
ICP+EDI电信增值业务许可证申请审核网站源码

扫码联系技术微信【备注:站媒体网】
客服QQ:137483024