首页 > web前端 > js教程 > 如何准确确定 HTML 元素内的字符偏移?

如何准确确定 HTML 元素内的字符偏移?

DDD
发布: 2024-11-19 04:42:02
原创
676 人浏览过

How to Accurately Determine Character Offsets Within an HTML Element?

计算相对于父容器的范围开始和结束偏移

假设您遇到如下 HTML 元素:

<div>
登录后复制

用户用鼠标选择文本“home”。确定“#parent”元素内的字符偏移量是一项常见任务,尤其是在选择 HTML 标记时。

虽然“range.startOffset”属性提供相对于直接容器的偏移量,但它仅限于字符偏移量当容器是文本节点时。为了克服这个限制,我们提出了一个更新的解决方案:

function getSelectionCharacterOffsetWithin(element) {
  var start = 0;
  var end = 0;
  var doc = element.ownerDocument || element.document;
  var win = doc.defaultView || doc.parentWindow;
  var sel;
  if (typeof win.getSelection != "undefined") {
    sel = win.getSelection();
    if (sel.rangeCount > 0) {
      var range = win.getSelection().getRangeAt(0);
      var preCaretRange = range.cloneRange();
      preCaretRange.selectNodeContents(element);
      preCaretRange.setEnd(range.startContainer, range.startOffset);
      start = preCaretRange.toString().length;
      preCaretRange.setEnd(range.endContainer, range.endOffset);
      end = preCaretRange.toString().length;
    }
  } else if ((sel = doc.selection) &amp;&amp; sel.type != "Control") {
    var textRange = sel.createRange();
    var preCaretTextRange = doc.body.createTextRange();
    preCaretTextRange.moveToElementText(element);
    preCaretTextRange.setEndPoint("EndToStart", textRange);
    start = preCaretTextRange.text.length;
    preCaretTextRange.setEndPoint("EndToEnd", textRange);
    end = preCaretTextRange.text.length;
  }
  return { start: start, end: end };
}
登录后复制

为了演示更新的方法,我们初始化事件侦听器以捕获选择更改并更新页面上的日志元素:

function reportSelection() {
  var selOffsets = getSelectionCharacterOffsetWithin(
    document.getElementById("editor")
  );
  document.getElementById("selectionLog").innerHTML =
    "Selection offsets: " + selOffsets.start + ", " + selOffsets.end;
}

window.onload = function () {
  document.addEventListener("selectionchange", reportSelection, false);
  document.addEventListener("mouseup", reportSelection, false);
  document.addEventListener("mousedown", reportSelection, false);
  document.addEventListener("keyup", reportSelection, false);
};
登录后复制

此代码使您能够准确确定 HTML 元素中用户选择的字符偏移量,即使在选择 HTML 标签时也是如此。

以上是如何准确确定 HTML 元素内的字符偏移?的详细内容。更多信息请关注PHP中文网其他相关文章!

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