ホームページ > ウェブフロントエンド > jsチュートリアル > ContentEditable 要素のキャレット位置を取得するにはどうすればよいですか?

ContentEditable 要素のキャレット位置を取得するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-25 07:10:12
オリジナル
319 人が閲覧しました

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート