在IE10中使用execCommand插入后如何模糊(焦点丢失)图像
How blur (focus lost) the image after insertion with execCommand in IE10?
我有一个内容可编辑的DIV
,例如:
<div contenteditable='true' id='myRichTextBox'></div>
此外,我还有一个按钮,可以将图像插入到提到的DIV
中。一旦插入图像,它就使用可调整大小的处理程序进行聚焦
我如何才能失去它的焦点并将焦点恢复到内容可编辑的DIV
?
<button type='button' onclick='insertImage()'>Insert an image</button>
Javascript代码:
function insertImage()
{
document.execCommand('insertImage',false,'myImage.png');
}
感谢您的帮助
您可以通过多种方式解决这一问题,但一个简单的方法是在大多数浏览器中使用document.execCommand("InsertHTML")
,在IE中返回到pasteHTML()
。但是,这在IE 11中不起作用,因为它不支持document.selection
或InsertHTML
命令。
function insertImageWithInsertHtml(imgSrc) {
var imgHtml = "<img src='" + imgSrc + "'>";
var sel;
if (document.queryCommandSupported("InsertHTML")) {
document.execCommand("InsertHTML", false, imgHtml);
} else if ( (sel = document.selection) && sel.type != "Control") {
var range = sel.createRange();
range.pasteHTML(imgHtml);
range.collapse(false);
range.select();
}
}
另一种在除IE<=8(您可以使用与上述相同的回退)将是使用从选择中获得的范围的insertNode()
方法手动插入图像。这是最经得起未来考验和符合标准的方法,所以我建议:
function insertImageWithInsertNode(imgSrc) {
var sel;
if (window.getSelection) {
var sel = window.getSelection();
if (sel.rangeCount > 0) {
var range = sel.getRangeAt(0).cloneRange();
range.deleteContents();
var img = document.createElement("img");
img.src = imgSrc;
range.insertNode(img);
// Place the caret immediately after the image
range.setStartAfter(img);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
}
} else if ( (sel = document.selection) && sel.type != "Control") {
var range = sel.createRange();
range.pasteHTML("<img src='" + imgSrc + "'>");
range.collapse(false);
range.select();
}
}
最后,这里有一个展示所有三种技术的现场演示:
http://jsfiddle.net/timdown/9ScLA/3/
我使用了以下解决方案并成功了!
function insertImage(imgSrc)
{
var ua = navigator.userAgent.toLowerCase();
var tr;
if (ua.indexOf("msie") > 0)
tr = document.selection.createRange();
document.execCommand("insertImage", false, imgSrc);
if(ua.indexOf("firefox") > 0)
document.execCommand("enableObjectResizing", false, false);
if (ua.indexOf("msie") > 0)
{
tr.collapse(false);
tr.select();
}
this.textbox.focus();
}
相关文章:
- 如果模糊事件的任何一个子项获得焦点,请阻止启动模糊事件
- Javascript:联合焦点模糊
- 当孩子获得焦点时触发模糊事件
- 初学者尝试使用焦点/模糊:JavaScript
- 如何防止在html中模糊(焦点丢失)时取消选择所选文本
- 当我失去焦点时,不会触发ng模糊
- iframe 中输入上的模糊/焦点事件(委派)
- 如果单击焦点元素的子元素,则会在获得焦点的父元素上触发模糊事件
- 在调用窗口模糊(浏览器失去焦点)时避免元素模糊处理程序
- 如何为 @Html.Editor() 编写焦点和模糊事件
- 在 nsiWindowWatcher 或 nsiWindowMediator 上监听焦点/模糊?对于火狐扩展
- Typeahead Angular JS:在输入模糊后显示焦点结果
- 将焦点返回到具有相同类的输入的模糊上
- 如何将iframe与模糊和焦点一起使用
- Chrome(也许是Safari?)激发了“;模糊”;当浏览器失去焦点时,在输入字段上显示两次
- 谷歌Chrome扩展弹出打开事件和焦点,模糊事件
- Chrome不会为内容可编辑iframe中的文档触发焦点和模糊事件
- Dojo验证文本框模糊焦点..聚焦
- 使用jQuery焦点和模糊来显示和隐藏消息
- 在IE10中使用execCommand插入后如何模糊(焦点丢失)图像