4

contenteditableに設定された要素の現在のキャレット (テキスト カーソル) 位置で切り捨てられた、ノードのテキスト (または内部の html 全体) を取得する必要がありますtrue。range.setStart() などを使ってみたのですが、表裏がつきません...

編集:明確にするために、いくつかのイベントで、現在フォーカスがあるノードの先頭からキャレットの位置(編集可能なフィールドにフォーカスがある場合、現在点滅している垂直線がある場所)までスクリプトでテキストを抽出し、それを変数に保存する必要があります. ユーザーが ctrl+shift+home と ctrl+c を押した場合と同様のアクション

例: 指定された html:

<span contenteditable=true>Hello, world<br> Good bye, World</span>

そして、キャレットが「Good」と「bye」の間にあると仮定して、取得したいと思います

"Hello, world<br> Good"

4

4 に答える 4

0

この回答を見てください: https://stackoverflow.com/a/16575647/1532004彼は似たようなことをしていると思います。おそらく彼は月を越えて撃っていますが、彼は実用的な解決策を得ました:)

于 2013-05-22T10:11:26.363 に答える
0

たぶん、これはあなたを正しい方向に押し進めるでしょう: 範囲の開始と終了のオフセットをその親コン​​テナに相対的に取得します

私はあなたの例で機能している機能を示すフィドルを作成しました: http://jsfiddle.net/Kn8qr/2/

function getCaret(element) {
var caretOffset = 0;
if (typeof window.getSelection != "undefined") {
    var range = window.getSelection().getRangeAt(0);
    var preCaretRange = range.cloneRange();
    preCaretRange.selectNodeContents(element);
    preCaretRange.setEnd(range.endContainer, range.endOffset);
    caretOffset = preCaretRange.toString().length;
} else if (typeof document.selection != "undefined" && document.selection.type != "Control") {
    var textRange = document.selection.createRange();
    var preCaretTextRange = document.body.createTextRange();
    preCaretTextRange.moveToElementText(element);
    preCaretTextRange.setEndPoint("EndToEnd", textRange);
    caretOffset = preCaretTextRange.text.length;
}
var elCont=element.innerHTML;

var truncCont=elCont.substr(0,caretOffset);

alert(truncCont);
}

これの功績は関数の作成者にあり、私はそれを少し編集しました。

于 2013-05-22T09:43:23.790 に答える