首頁 >web前端 >js教程 >如何在 ContentEditable Div 中設定和維護遊標位置?

如何在 ContentEditable Div 中設定和維護遊標位置?

Linda Hamilton
Linda Hamilton原創
2024-11-15 03:21:02717瀏覽

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中文網其他相關文章!

Event function default this location position
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:如何在同一頁上多次執行 Greasemonkey 腳本而不刷新?下一篇:如何在同一頁上多次執行 Greasemonkey 腳本而不刷新?

相關文章

看更多