【发布时间】:2018-06-12 12:41:57
【问题描述】:
我想替换 contenteditable div 中光标前的单词(另见 Detect the last written word when typing TAB in a textarea or contenteditable div)。
以下代码:
-
完全适用于
contenteditablediv 的第一段 -
不适用于
contenteditablediv 的下一段:未捕获的 IndexSizeError:无法在“Range”上执行“setStart”:偏移量 71 大于节点的长度 (38)。
在contenteditable div的第2行按TAB时,我应该如何修改以下代码使其工作?
document.addEventListener("keydown", function(e) {
var elt = e.target;
if (elt.isContentEditable)
{
if (e.keyCode == 9) {
e.preventDefault();
elt.focus();
range = document.getSelection().getRangeAt(0).cloneRange();
range.collapse(true);
range.setStart(elt, 0);
var words = range.toString().trim().split(' ');
var lastWord = words[words.length - 1];
if (lastWord) {
var wordStart = range.toString().lastIndexOf(lastWord);
var wordEnd = wordStart + lastWord.length;
range.setStart(elt.firstChild, wordStart);
range.setEnd(elt.firstChild, wordEnd);
range.deleteContents();
document.execCommand('insertText', false, "hello\nnewline");
elt.normalize();
}
}
}
});
<div contenteditable>Hello, click here and press TAB to replace this WORD<br>Also click here and press TAB after this ONE</div>
注意:我已经测试了来自 Replace specific word in contenteditable 的答案,但是当 contenteditable div 中有多行时它不起作用。
【问题讨论】:
标签: javascript html contenteditable