私がこのhtmlを持っているとしましょう:
<div class="edit" contenteditable="true">
<b>Example text</b>
Text outside
<b>
<i>
<u>underlined and italic and bold</u>
italic and bold</i></b>
more Text
<br>
after the line break
</div>
そして、便宜上、指定された要素内の選択範囲の終わりのオフセットを返すこの JavaScript 関数があります。
var getCaretCharacterOffsetWithin = function(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;
}
return caretOffset;
}
outside
ユーザーが で始まり、その範囲内で終わる選択を行ったとしますitalic and bold
。これは次のようになります。
"outsideunderlined and italic and bolditalic and bo"
<b>Example text</b>
この文字列全体を、選択した後のテキストを損傷することなく置き換えるにはどうすればよいでしょうか。置き換える文字列が空の文字列""
の場合、結果は次のようになります。
<div class="edit" contenteditable="true">
<b>Example text</b>
Text
ld
more Text
<br>
after the line break
</div>
選択範囲内のタグが保持されているかどうかは気にしません。どちらの方法が簡単かわかりません。
ご不明な点がございましたら、お尋ねください。
よろしくお願いいたします。