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; }
このコードは次の仮定の下で動作します:
ネストされた要素を含むより複雑なコンテンツに対応する、より包括的なソリューションについては、以下を参照してください。次の Stack Overflow の回答: https://stackoverflow.com/a/4812022/96100
以上がContentEditable 要素のキャレット位置を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。