在评论输入框中插入表情

2020-11-26 12:26:37 浏览数 (1)

最近在做一个后台管理系统,要求可以对前台用户的作品进行评论,而评论要可以输入表情,常规的文字输入框都是用的文本域textarea来做的,但这种输入框只能输入文字,没有办法输入表情图标,这个时候可编辑div就能起到作用了,那么如何在可编辑的div中插入表情呢?

要完成这个功能得用到 selection 以及 range,selection 对象由 window.getSelection() 方法获得,它代表页面中的文本选区,选区对应的区域,而range对象,可由selection对象的 getRangeAt() 方法获得,实现在光标处插入图片后将光标移到图片后边,就是使用这两个对象中的方法。

基本的实现步骤是这样的,首先获得 selection 选区对象,再获得范围对象 range,创建图片节点,将图片节点插入到范围中,接着将范围收缩为它末端的一个点,最后将选区清除,将收缩后的范围重新添加到选区中即可,以下是核心的代码实现。

代码语言:javascript复制
function insertImg(src) {
    if ('getSelection' in window) {
        var sel = window.getSelection();
        // 有sel对象,并且用户已经点击过页面,且点击的选区起点和终点在同一位置
        if (sel && sel.rangeCount === 1 && sel.isCollapsed) {
            // 获取范围
            var range = sel.getRangeAt(0);
            var img = new Image();
            img.src = src;
            // 插入图片
            range.insertNode(img);
            // 将选区折叠为一个插入点,为了兼容IE添加一个参数
            range.collapse(false);
            // 移除选区
            sel.removeAllRanges();
            // 添加选区
            sel.addRange(range);
        }
    } else if ('selection' in document) {
        // content为可编辑div的ID
        var div = document.getElementById('content');
        // 获得焦点
        div.focus();
        // 创建范围对象
        var range = document.selection.createRange();
        // 插入图片
        range.pasteHTML('<img src="'   src   '">');
        // 如果要插入文本,请用range.text="XXXX"
        div.focus();
    }
}

0 人点赞