今天贝贝同学问了我一个问题,怎样在可编辑的div中的光标处插入图片。网上search了一把,果然如贝贝所说,一堆都是往光标处插入文本的。
最后发现使用document.execCommand()方法即可简单的往光标处插入图片。在chrome和firefox下只需要执行document.execCommand(‘InsertImage’, false, _imgUrl);就能达到目的,可是在IE下就有bug:当光标停留在某个地方,不选中任何东西的情况下,该方法无效。当选中编辑区内的一部分内容时,该方法有效。经过一番摸索,终于找到解决方案。原来在不选中任何东西的情况下,当我去点击插入按钮时,编辑区就失去了焦点,这个时候插入会失败。所以需要先保存焦点状态,插入之前恢复状态即可。具体内容看代码
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>edit</title>
</head>
<body>
<div id="editor"
style="width:400px;margin:100px auto;height:300px;border:1px solid #DFDFDF;"
contenteditable="true">
这里插入一个图片!
</div>
<a href="javascript:void(0);" onclick="edit()">强力插入!</a>
<script>
var editor = document.getElementById("editor");
var range, bookmark;
var saveFocus = function(){//保存焦点状态
if (document.selection) { //只有坑爹的IE才执行下面的代码
range = document.selection.createRange();
bookmark=range.getBookmark();
}
}
editor.onclick = saveFocus;//在鼠标点击编辑区时保存焦点
editor.onkeydown = saveFocus;//在输入内容时也保存焦点
function edit() {
insertImg("http://www.baidu.com/img/baidu_sylogo1.gif");
}
function insertImg(_img) {
if (range) { //同样,坑爹IE专用代码
range.moveToBookmark(bookmark);
range.select();
}
document.execCommand('InsertImage', false, _img);
}
</script>
</body>
</html>
将代码中方法document.execCommand(‘InsertImage’, false, _img)更改参数,应该可以插入html代码等其他元素。
