首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Exec命令InsertHTML未插入到内容可编辑分区标记的正确位置

Exec命令InsertHTML未插入到内容可编辑分区标记的正确位置
EN

Stack Overflow用户
提问于 2020-08-15 03:52:23
回答 1查看 30关注 0票数 0

我需要在内容可编辑的div中插入一个使用insertHtml execCommand的图像。检查下面的代码。

代码语言:javascript
复制
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>');
    }
}
代码语言:javascript
复制
<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部分,而不仅仅是文本,并且将图像放在错误的部分。为什么?我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2020-08-15 04:10:05

它将回车符作为字符进行计数。如果您将光标位置更改为29,它将精确地移动到正确的位置。

如果您想看到它的实际效果,只需运行您的代码片段,将光标放在项目1之前,然后按右箭头键29次,您就会紧跟在项目4之后

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63419245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档