文本框添加表情、指定光标位置插入元素

本文介绍了JavaScript函数`chooseFace`和`common.insertHtmlAtCaret`,用于在用户聚焦文本框时动态插入图片,并保持光标位置。涉及了浏览器SelectionAPI和DOM操作以实现精确插入和光标管理。
摘要由CSDN通过智能技术生成

<!--文本框-->
<div class="div-enter-textarea" contenteditable="true"></div>
//选择表情事件
function chooseFace(){
    var facehtml = '<img ctag="face" src="../images/smile.png"  />';
    $('.div-enter-textarea').focus();  //文本框获取焦点
     _util.common.insertHtmlAtCaret(facehtml);
};
    //在指定光标位置插入元素
    u.common.insertHtmlAtCaret = function (str, currRange) {
        var selection = window.getSelection
            ? window.getSelection()
            : document.selection;
        if (currRange) {
            // 存在最后光标对象,选定对象清除所有光标并添加最后光标还原之前的状态
            selection.removeAllRanges();
            selection.addRange(currRange);
        }
        var range = selection.createRange ? selection.createRange() : selection.getRangeAt(0);
        if (!window.getSelection) {
            var selection = window.getSelection
                ? window.getSelection()
                : document.selection;
            var range = selection.createRange
                ? selection.createRange()
                : selection.getRangeAt(0);
            range.pasteHTML(str);
            range.collapse(false);
            range.select();
        } else {
            var hasR = range.createContextualFragment(str);
            var hasR_lastChild = hasR.lastChild;
            while (
                hasR_lastChild &&
                hasR_lastChild.nodeName.toLowerCase() == 'br' &&
                hasR_lastChild.previousSibling &&
                hasR_lastChild.previousSibling.nodeName.toLowerCase() == 'br'
            ) {
                var e = hasR_lastChild;
                hasR_lastChild = hasR_lastChild.previousSibling;
                hasR.removeChild(e);
            }
            range.insertNode(hasR);
            if (hasR_lastChild) {
                range.setEndAfter(hasR_lastChild);
                range.setStartAfter(hasR_lastChild);
            }
            range.collapse(false);
            selection.removeAllRanges();
            selection.addRange(range);
        }
        //记录最后光标对象
        currRange = selection.getRangeAt(0);
    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值