我需要在内容可编辑的div中插入一个使用insertHtml execCommand的图像。检查下面的代码。
function createRange(node, chars, range) {
if (!range) {
range = document.createRange()
range.selectNode(node);
range.setStart(node, 0);
}
if (chars.count === 0) {
range.setEnd(node, chars.count);
} else if (node && chars.count >0) {
if (node.nodeType === Node.TEXT_NODE) {
if (node.textContent.length < chars.count) {
chars.count -= node.textContent.length;
} else {
range.setEnd(node, chars.count);
chars.count = 0;
}
} else {
for (var lp = 0; lp < node.childNodes.length; lp++) {
range = createRange(node.childNodes[lp], chars, range);
if (chars.count === 0) {
break;
}
}
}
}
return range;
}
function setCurrentCursorPosition(chars) {
if (chars >= 0) {
var selection = window.getSelection();
range = createRange(document.getElementsByTagName('div')[0].parentNode, { count: chars });
if (range) {
range.collapse(false);
selection.removeAllRanges();
selection.addRange(range);
}
document.execCommand('inserthtml', false, '<br><img id="img1" alt="" src="https://assets.justinmind.com/wp-content/uploads/2019/04/wireframe-examples-web-and-mobile-header.png" style="width:100%;"><br>');
}
}<div contenteditable="true">item 1<br>item 2<br><br>item 3<br>item 4<br>item 5<br>...</div>
<button id="addImage" type="button" onclick="setCurrentCursorPosition(24)">Add Image</button>
正如您所看到的,图像没有插入到正确的位置。这只是一个例子,但让我们假设用户将插入符号设置在位置24,然后添加图像。图像应该插入在"item 4“部分之后,但它在之前插入了字符,这意味着它正在考虑html部分,而不仅仅是文本,并且将图像放在错误的部分。为什么?我做错了什么?
发布于 2020-08-15 04:10:05
它将回车符作为字符进行计数。如果您将光标位置更改为29,它将精确地移动到正确的位置。
如果您想看到它的实际效果,只需运行您的代码片段,将光标放在项目1之前,然后按右箭头键29次,您就会紧跟在项目4之后
https://stackoverflow.com/questions/63419245
复制相似问题