JS range之保存光标位置,为 光标位置添加内容

本文介绍了一种使用可编辑DIV实现编辑框的方法,并通过JavaScript实现了点击按钮在光标位置插入HTML内容的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在此,我们采用可编辑div作为编辑框,首先给编辑框获取focus加光标,然后,点击取消编辑框失去焦点,但是依然保存光标位置(假装失去焦点),然后,点击确定,为光标位置添加内容。

<button class="cancel">Cancel</button>
<button class="Sure">Sure</button>
<div contenteditable="true" id="textbox">
   <strong>test</strong>
   <p>testtesttesttest</p>
    <strong>testtest</strong>
    <img src="1.jpg" alt="test">
</div>

代码如下:

<script src="js/jquery-3.2.1.min.js"></script>
<script type="text/javascript">
$(function(){
$(".cancel").on("click", function(){
  var text = '';
  insertTextAtSelection(text);
})
$(".Sure").on("click", function(){
  var text = '<strong><i>加粗变斜体</i></strong>';
  insertTextAtSelection(text,"html");
})
function insertTextAtSelection(text, mode) {
    var _this = this;
    var sel, range, node;
    mode = mode || '';
    if (window.getSelection) {
        sel = window.getSelection();
        if (sel.getRangeAt && sel.rangeCount) {
            range = sel.getRangeAt(0);
            // range.deleteContents();
            var textNode = document.createTextNode(text);
            if (mode == "html") {
                var el = document.createElement("div");
                el.innerHTML = text;
                var frag = document.createDocumentFragment(),
                    node, lastNode;
                while ((node = el.firstChild)) {
                    lastNode = frag.appendChild(node);
                }
                range.insertNode(frag);
                sel.removeAllRanges();
                range = range.cloneRange();
                sel.addRange(range);
            } else {
                console.log(textNode);
                range.insertNode(textNode);
                range.selectNode(textNode);
            }
        }
    }
}
 });
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值