で編集可能なdivのコンテンツに文字でキャレット位置を見つける私はのcontentEditable属性を持つdiv要素の内側にカーソルをキャレット位置の取得中にいくつかのトラブルを抱えてメートル。角度
実際に、私は次の関数を使用して、M:
onBlurArea (field, ev) {
ev.preventDefault()
const editable = ev.target.childNodes[1].childNodes[2]
this.positions[field] = {start: this.getCaretCharacterOffsetWithin(editable), editable}
}
getCaretCharacterOffsetWithin (element) {
let ie = (typeof this.doc.selection != 'undefined' && this.doc.selection.type != 'Control') && true
let w3 = (typeof this.win.getSelection != 'undefined') && true
let caretOffset = 0
if (w3) {
let range = this.win.getSelection().getRangeAt(0)
console.log(range)
let preCaretRange = range.cloneRange()
preCaretRange.selectNodeContents(element)
preCaretRange.setEnd(range.endContainer, range.endOffset)
console.log(preCaretRange)
caretOffset = preCaretRange.toString().length
console.log(caretOffset)
}
else if (ie) {
let textRange = this.doc.selection.createRange()
let preCaretTextRange = this.doc.body.createTextRange()
preCaretTextRange.expand(element)
preCaretTextRange.setEndPoint('EndToEnd', textRange)
caretOffset = preCaretTextRange.text.length
}
return caretOffset
}
Iは、テキスト角度フィールドぼかし場合関数onBlurAreaがトリガされる:また
<text-angular ng-model="moduleManage.currentModule.description" required ng-blur="moduleManage.onBlurArea('description', $event)"></text-angular>
:
this.doc = $document
this.win = $window
-
を
私はカーを取得する必要がありますライブラリによって管理されていない外部のものを追加することができます。
私の問題は、私は私のフィールドをぼかしたときに、私は正確なフィールドまたは別の1に焦点を当てた場合、私のcarretOffsetが同じではないということです。常に上記
機能は、私は範囲をログインすると、私はいつもにも、テキストの角度モジュールのうち
編集:私は私の問題は、次の行にあると思う:...私が全く理解できない何かを与える
let range = this.win.getSelection().getRangeAt(0)
'this.win.getSelection(中' startContainer')。getRangeAtは(0) '' onBlurArea'で定義されたあなたの 'editable'定数の子ノードではないでしょうか? – MMhunter
まったくそうではありませんが、実際には私の焦点を失う部分です。たとえば、divの外側にあるボタンをクリックすると、ボタンがstartContainerになります。他の種類の要素の場合と同じです... – mfrachet
ああ、それはまさに「ぼかし」の仕組みです。前と同じ問題に直面した。この場合、 'blur'イベントが発生した後は範囲を取得できません。おそらく、 'editable' divに' keyup'または 'mouseup'イベントがあるたびに範囲を格納しようとすることができます。それは私が似たような目的を達成する方法でした。 – MMhunter