首页 > web前端 > js教程 > 如何获取 ContentEditable 元素中的插入符位置?

如何获取 ContentEditable 元素中的插入符位置?

Susan Sarandon
发布: 2024-11-25 07:10:12
原创
340 人浏览过

How Can I Get the Caret Position in a ContentEditable Element?

检索 ContentEditable 元素中的插入符位置

与在 contentEditable 元素中设置插入符位置的大量解决方案相比,确定其事实证明,目前的地位对于许多开发商来说是难以捉摸的。这个问题解决了这一特定的知识差距。

要在用户输入(例如按键)时确定给定 contentEditable 元素内的插入符位置,可以使用以下代码:

function getCaretPosition(editableDiv) {
  var caretPos = 0,
    sel, range;
  if (window.getSelection) {
    sel = window.getSelection();
    if (sel.rangeCount) {
      range = sel.getRangeAt(0);
      if (range.commonAncestorContainer.parentNode == editableDiv) {
        caretPos = range.endOffset;
      }
    }
  } else if (document.selection && document.selection.createRange) {
    range = document.selection.createRange();
    if (range.parentElement() == editableDiv) {
      var tempEl = document.createElement("span");
      editableDiv.insertBefore(tempEl, editableDiv.firstChild);
      var tempRange = range.duplicate();
      tempRange.moveToElementText(tempEl);
      tempRange.setEndPoint("EndToEnd", range);
      caretPos = tempRange.text.length;
    }
  }
  return caretPos;
}
登录后复制

此代码在以下假设下运行:

  • 可编辑的 div 包含单个文本节点,没有额外的嵌套元素。
  • 可编辑 div 的 CSS 空白属性未设置为“pre”。

有关使用嵌套元素容纳更复杂内容的更全面的解决方案,请参阅以下 Stack Overflow 答案:https://stackoverflow.com/a/4812022/96100

以上是如何获取 ContentEditable 元素中的插入符位置?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板