关于 contentEditable 可编辑DIV 实现在光标处插入自定义图片【已解决,可直接使用】

话不多说,直接出解决方案【复制代码可直接使用】

可编辑DIV也就是常说的富文本编辑器。当我们自己实现一个富文本编辑器时,需要设置div的可编辑属性 contenteditable="true"

解决方案

方案一、使用基础特性 document.execCommand
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>contentEditable上传图片</title>
    <style>
        #editor{
            border: 1px solid #ccc; 
            width: 400px;
            height: 200px;
            margin-bottom: 30px;
        }
        #editor img{
            /* 需要图片换行的话,可以设置display:block; */
            display: block;
            max-width: 100px;
        }
    </style>
</head>
<body>
    <div id="editor" contenteditable="true">
        0123456789
    </div>
    <input type="file" name="file" id="uploadFile" onchange="uploadFile(event)"/>    
</body>
<script type="text/javascript" language="javascript">
    const edited = document.getElementById('editer');
    // 文件上传,模拟方法
    function uploadFile(e){
        const file = e.target.files[0]; // 需要上传到后台的图片
        // 文件上传,此处功能省略,直接使用假数据
        const filePath = 'https://img2.baidu.com/it/u=4259428193,1811830338&fm=253&fmt=auto&app=138&f=JPEG?w=750&h=500';
        // filePath为后台返回的图片地址
        document.execCommand('InsertImage', false, filePath);
    }
</script>
</html>
方案二、使用自定义方法插入【简单改造可实现在前面、后面插入】
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>contentEditable上传图片</title>
    <style>
        #editor{
            border: 1px solid #ccc; 
            width: 400px;
            height: 200px;
            margin-bottom: 30px;
        }
        #editor img{
            /* 需要图片换行的话,可以设置display:block; */
            display: block;
            max-width: 100px;
        }
    </style>
</head>
<body>
    <div id="editor" contenteditable="true">
        0123456789
    </div>
    <input type="file" name="file" id="uploadFile" onchange="uploadFile(event)"/>    
</body>
<script type="text/javascript" language="javascript">
    const edited = document.getElementById('editer');
    // 文件上传,模拟方法
    function uploadFile(e){
        const file = e.target.files[0]; // 需要上传到后台的图片
        // 文件上传,此处功能省略,直接使用假数据
        const filePath = 'https://img2.baidu.com/it/u=4259428193,1811830338&fm=253&fmt=auto&app=138&f=JPEG?w=750&h=500';
        // filePath为后台返回的图片地址
        insertImageAtCursor(filePath)
    }
    // 在光标处插入图片
    const insertImageAtCursor = (url) => {
        const imgNode = document.createElement('img');
        imgNode.src = url;
        const selection = window.getSelection();
        const range = selection.getRangeAt(0);
        range.insertNode(imgNode);
        range.setStartAfter(imgNode);
        range.collapse(true);
        selection.removeAllRanges();
        selection.addRange(range);
    };
</script>
</html>

总结

关于 contentEditable,大家可以认真看一下官方文档哟~

希望上面的内容对你的工作学习有所帮助!欢迎各位一键三连哦~

各位 加油!

✨ 原创不易,还希望各位大佬支持一下 \textcolor{blue}{原创不易,还希望各位大佬支持一下} 原创不易,还希望各位大佬支持一下

👍 点赞,你的认可是我创作的动力! \textcolor{green}{点赞,你的认可是我创作的动力!} 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向! \textcolor{green}{收藏,你的青睐是我努力的方向!} 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富! \textcolor{green}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!

相关推荐
এ慕ོ冬℘゜5 分钟前
使用 jQuery 动态渲染表格与状态切换
前端·javascript·jquery
人间凡尔赛34 分钟前
2026 前端必修:4 个让 CSS 脱胎换骨的现代新特性(附实战代码)
前端·css
用户21816970493044 分钟前
Flutter (二十) 轮播图
前端
前端snow1 小时前
ai agent - RAG 汇总
前端
智购科技自动售货机厂家1 小时前
2026自动售货机AI视觉识别优化:从YOLOv11n模型量化到RKNN部署的端侧推理工程实践~YH
javascript·人工智能·yolo·机器学习·计算机视觉·目标跟踪·perl
计算机魔术师1 小时前
AI为拿高分不惜入侵网站:22个模型作弊审计,真相让人背脊发凉
前端
晓说前端2 小时前
TypeScript 核心语法应用 —— Vue 3 中的使用(下)
前端·javascript·typescript·类型系统
zhangminghuan2 小时前
微信小程序开发核心知识点全景解析(前端必备硬核基础)
前端·微信小程序·小程序
boooooooom2 小时前
尝尝咸淡:从朴素 RAG 到 Graph RAG——一个烹饪问答系统的三层检索升级之路
前端·后端·llm
cindershade2 小时前
让每条前端异常都能回答:该由谁修、为什么现在修
前端