首页 > web前端 > js教程 > 如何在 ContentEditable Div 中设置和维护光标位置?

如何在 ContentEditable Div 中设置和维护光标位置?

Linda Hamilton
发布: 2024-11-15 03:21:02
原创
724 人浏览过

How to Set and Maintain Cursor Position in a ContentEditable Div?

在 contentEditable <div> 上设置光标位置

处理 contentEditable

<div> 时,默认浏览器功能会将光标位置重置为文本的开头恢复焦点后。要解决此问题,请考虑以下解决方案:

存储和恢复光标位置:

  1. 保存当前位置: 在 onmouseup 和onkeyup 事件,将当前光标位置存储在变量中, saveRange。
  2. 恢复位置:在onfocus事件中,从savedRange恢复保存的选择。

此方法确保光标位于最后一个已知位置当 div 重新获得焦点时。

处理点击:

要在单击 div 时恢复选择,需要执行以下附加步骤:

  1. 取消单击事件: 附加 cancelEvent() onclick 和 onmousedown 事件。此函数可防止这些事件的默认行为,并调用restoreSelection()。
  2. 跟踪焦点状态: 使用 isInFocus 变量确定 div 是否处于焦点状态。仅当 div 未获得焦点时取消点击事件。

工作代码:

<div>
登录后复制
var savedRange, isInFocus;

function saveSelection() {
  savedRange = window.getSelection ? window.getSelection().getRangeAt(0) : document.selection.createRange();
}

function restoreSelection() {
  isInFocus = true;
  document.getElementById("area").focus();

  if (savedRange) {
    if (window.getSelection) {
      var s = window.getSelection();
      s.removeAllRanges();
      s.addRange(savedRange);
    } else if (document.createRange) {
      window.getSelection().addRange(savedRange);
    } else if (document.selection) {
      savedRange.select();
    }
  }
}

function onDivBlur() {
  isInFocus = false;
}

function cancelEvent(e) {
  if (isInFocus === false && savedRange) {
    if (e && e.preventDefault) {
      e.stopPropagation();
      e.preventDefault();
    } else {
      window.event.cancelBubble = true;
    }
    restoreSelection();
    return false;
  }
}
登录后复制

以上是如何在 ContentEditable Div 中设置和维护光标位置?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
上一篇:如何在同一页面上多次执行 Greasemonkey 脚本而不刷新? 下一篇:如何使用 jQuery 检查输入是否具有焦点?
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
相关专题
更多>
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板