Javascript 恢复插入符号位置不使用IE

Javascript 恢复插入符号位置不使用IE,javascript,html,contenteditable,caret,Javascript,Html,Contenteditable,Caret,为了恢复可编辑DIV的插入符号位置,我使用以下Javascript代码: var savedRange,isInFocus; function saveSelection() { if(window.getSelection) { //non IE Browsers savedRange = window.getSelection().getRangeAt(0); } else if(document.selection) { //IE savedRange = docu

为了恢复可编辑DIV的插入符号位置,我使用以下Javascript代码:

var savedRange,isInFocus;
function saveSelection() {
  if(window.getSelection) { //non IE Browsers
    savedRange = window.getSelection().getRangeAt(0);
  } else if(document.selection) { //IE
    savedRange = document.selection.createRange();  
  } 
}

function restoreSelection() {
  isInFocus = true;
  document.getElementById('myInstance1').focus();
  if(savedRange != null) {
    if (window.getSelection) { //non IE and there is already a selection
      var s = window.getSelection();
      if (s.rangeCount > 0) 
        s.removeAllRanges();
      s.addRange(savedRange);
    } else if (document.createRange) { //non IE and no selection
      window.getSelection().addRange(savedRange);
    } else if (document.selection) { //IE
      savedRange.select();
    }
  }
}
此代码用于将文本区域中的一些文本添加到myInstance1 contenteditable DIV。并使用IE将文本添加到页面顶部

它可以与Firefox和Chrome配合使用

有人知道为什么IE部分不工作吗

找到了解决方案:通过添加
document.getElementById('myInstance1').focus()
before
savedRange=document.selection.createRange()它可以工作:-D

function saveSelection() {
  if(window.getSelection) { //non IE Browsers
    savedRange = window.getSelection().getRangeAt(0);
  } else if(document.selection) { //IE
    document.getElementById('myInstance1').focus();
    savedRange = document.selection.createRange();  
  } 
}

IE倾向于比其他浏览器更早更频繁地破坏选择,所以我认为选择保存发生得太晚了。一些可能有用的链接:,我尝试了这个,但我有相同的结果<代码>函数fixDivCaret(IEmyIns){IEmyIns.attachEvent('onbeforedeactivate',函数(){var sel=document.selection;if(sel.type!=“None”){savedRange=sel.createRange();}};}if(document.selection){var IEmyIns=document.getElementById('myInstance1');fixDivCaret(IEmyIns);}
一个示例页面会有所帮助。@TimDown通过添加
document.getElementById('myInstance1').focus()来实现
before
savedRange=document.selection.createRange()它可以工作:-D