假设我有这个 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>
我不在乎选择中的标签是否保留我不确定哪种方式更容易。
如果您有任何不清楚的地方,请询问。
提前谢谢你的帮助。