1

我试图让我的应用程序在所有浏览器上运行,并且我需要将插入符号放置在 contenteditable div 中,就在用户从弹出窗口中选择的文本之后。到目前为止,我的应用程序在 IE 上运行,但我还需要让它在 Opera、Firefox 和 Chrome 上运行。我在 IE 上放置插入符号的 Javascript 代码如下所示:

  function setCaretPos()
  {
     if (document.selection) 
     {
         /* IE */
         var range = document.body.createTextRange();
         range.moveToElementText(editableDiv);
         var insertedSpan = document.getElementById('span' + count);
         var preCaretRange = document.body.createTextRange();
         preCaretRange.moveToElementText(insertedSpan);
         preCaretRange.moveEnd("character", 2);
         range.setEndPoint("EndToEnd", preCaretRange);
         range.collapse(false);
         range.select();
      }
      else
      {
         if (window.getSelection) {
         /* Firefox, Opera, Chrome */
         var sel = window.getSelection();
         if(sel.rangeCount)
         {
            var range = sel.getRangeAt(0);
            var insertedSpan = document.getElementById('span' + count);
            var pos = insertedSpan.innerHTML.length;
            range.selectNodeContents(insertedSpan);
            range.setEndAfter(insertedSpan);
            range.collapse(false);
            sel.removeAllRanges();
            sel.addRange(range);
         }
      }
 }

如您所见,在 IE 上,我使用函数 moveEnd 将范围末尾向右移动 2 个字符,但我不知道在非 IE 浏览器上是否有任何等效的函数来移动范围末尾特定数量的字符。使用上面的代码,跨度内的文本被选中,但我的问题是插入跨度后插入符号没有显示,它只是消失了。

任何建议都非常感谢。谢谢!

4

0 回答 0