テキストフローにタグ"<p><font><br>"などのインラインhtml要素を含めるオプションがあるcontenteditabledivを使用しています。
ある時点で、contenteditable divのcaret位置(カーソル位置)を取得する必要があります。caret(カーソル)はhtml子要素の後にあります。
Firefoxのjavascriptで次のコードを使用していますが、contenteditable divのキャレット位置(カーソル位置)を見つけるのに正しく機能しますが、Internet Explorerwindow.getSelection
が未定義のキャレット位置(カーソル位置)を見つけるためのソリューションが見つかりません。
function getCaretPosition() {
if (window.getSelection && window.getSelection().getRangeAt) {
var range = window.getSelection().getRangeAt(0);
var selectedObj = window.getSelection();
var rangeCount = 0;
var childNodes = selectedObj.anchorNode.parentNode.childNodes;
for (var i = 0; i < childNodes.length; i++) {
if (childNodes[i] == selectedObj.anchorNode) {
break;
}
if (childNodes[i].outerHTML)
rangeCount += childNodes[i].outerHTML.length;
else if (childNodes[i].nodeType == 3) {
rangeCount += childNodes[i].textContent.length;
}
}
return range.startOffset + rangeCount;
}
return -1;
}
document.selection;
Internet Expolrerで動作することがわかりましたが、contenteditable divのcaret位置(カーソル位置)を見つけるのはうまくいかないと思います。
誰かが私のために何か回避策を持つことができますか?
以下の例では、カーソル位置は<p> two </p>の「t」と「w」の間
<div contenteditable="true"><p>one<br><b>t|wo</b></p></div>
にあります。このcontenteditabledivを使用している時点で何らかの操作を実行する必要があるため、上記の例では14番が必要だと思います。私のカスタムスタイルのRichTextboxがそれに適用されるように