美文网首页
js设置光标插入文字和HTML

js设置光标插入文字和HTML

作者: 一叶知秋_038b | 来源:发表于2019-11-28 14:09 被阅读0次

代码一:在textarea某个位置插入文本

function insertAtCursor(myField, myValue) {
    //IE support
    if (document.selection) {
        console.log('ie');
        myField.focus();
        sel = document.selection.createRange();
        sel.text = myValue;
    }
    //MOZILLA and others
    else if (myField.selectionStart || myField.selectionStart == '0') {
        console.log('modern');
        var startPos = myField.selectionStart;
        var endPos = myField.selectionEnd;
        myField.value = myField.value.substring(0, startPos)
            + myValue
            + myField.value.substring(endPos, myField.value.length);
        myField.selectionStart = startPos + myValue.length;
        myField.selectionEnd = startPos + myValue.length;
    } else {
        myField.value += myValue;
    }
}

$('textarea').click(function () {
    var $t = $(this);
    insertAtCursor(this, '[INSERTED]');
});

代码二:设置光标位置

function setSelectionRange(input, selectionStart, selectionEnd) {
  //IE9 and non-IE
  if (input.setSelectionRange) {
  // console.log('IE9 and non-IE');
    input.focus();
    input.setSelectionRange(selectionStart, selectionEnd);

  //IE < 9
  } else if (input.createTextRange) {
  // console.log('IE < 9');
    var range = input.createTextRange();
    range.collapse(true);
    range.moveEnd('character', selectionEnd);
    range.moveStart('character', selectionStart);
    range.select();
  }
}

function setCaretToPos(input, pos) {
  setSelectionRange(input, pos, pos);
}

$("#set-textarea").click(function() {
  setCaretToPos($("#the-textarea")[0], 10)
});
$("#set-input").click(function() {
  setCaretToPos($("#the-input")[0], 10);
});

jQuery版本

$.fn.selectRange = function (start, end) {
    if (typeof end === 'undefined') {
        end = start;
    }
    return this.each(function () {
        if ('selectionStart' in this) {
            this.selectionStart = start;
            this.selectionEnd = end;
        } else if (this.setSelectionRange) {
            this.setSelectionRange(start, end);
        } else if (this.createTextRange) {
            var range = this.createTextRange();
            range.collapse(true);
            range.moveEnd('character', end);
            range.moveStart('character', start);
            range.select();
        }
    });
};
//使用
$('#hw').selectRange(8);

代码三:获取光标位置

function getCursorPos(input) {
    if ("selectionStart" in input && document.activeElement == input) {
        return {
            start: input.selectionStart,
            end: input.selectionEnd
        };
    }
    else if (input.createTextRange) {
        var sel = document.selection.createRange();
        if (sel.parentElement() === input) {
            var rng = input.createTextRange();
            rng.moveToBookmark(sel.getBookmark());
            for (var len = 0; rng.compareEndPoints("EndToStart", rng) > 0; rng.moveEnd("character", -1)) {
                len++;
            }
            rng.setEndPoint("StartToStart", input.createTextRange());
            for (var pos = { start: 0, end: len }; rng.compareEndPoints("EndToStart", rng) > 0; rng.moveEnd("character", -1)) {
                pos.start++;
                pos.end++;
            }
            return pos;
        }
    }
    return -1;
}
function setCursorPos(input, start, end) {
    if (arguments.length < 3) end = start;
    if ("selectionStart" in input) {
        setTimeout(function() {
            input.selectionStart = start;
            input.selectionEnd = end;
        }, 1);
    }
    else if (input.createTextRange) {
        var rng = input.createTextRange();
        rng.moveStart("character", start);
        rng.collapse();
        rng.moveEnd("character", end - start);
        rng.select();
    }
}
    
$(function() {
    $(":input.getPos").on("keyup click", function(e) {
        var pos = getCursorPos(this);
        $(this).siblings(".posStart").val(pos.start);
        $(this).siblings(".posEnd").val(pos.end);
    }).siblings("input").keydown(function(e){
        if (e.keyCode == 13){
            $(this).siblings("button").click();
            e.preventDefault();
        }
    });
    $("button").click(function(e) {
        var par = $(this).parent();
        setCursorPos(par.find(":input.getPos")[0], +par.find(".posStart").val(), +par.find(".posEnd").val());
    });
});

代码四:在可编辑div或者iframe处插入HTML

function pasteHtmlAtCaret(html) {
    var sel, range;
    if (window.getSelection) {
        // IE9 and non-IE
        sel = window.getSelection();
        if (sel.getRangeAt && sel.rangeCount) {
            range = sel.getRangeAt(0);
            range.deleteContents();

            // Range.createContextualFragment() would be useful here but is
            // only relatively recently standardized and is not supported in
            // some browsers (IE9, for one)
            var el = document.createElement("div");
            el.innerHTML = html;
            var frag = document.createDocumentFragment(), node, lastNode;
            while ( (node = el.firstChild) ) {
                lastNode = frag.appendChild(node);
            }
            range.insertNode(frag);

            // Preserve the selection
            if (lastNode) {
                range = range.cloneRange();
                range.setStartAfter(lastNode);
                range.collapse(true);
                sel.removeAllRanges();
                sel.addRange(range);
            }
        }
    } else if (document.selection && document.selection.type != "Control") {
        // IE < 9
        document.selection.createRange().pasteHTML(html);
    }
}

转载网站http://caibaojian.com/js-insertcur.html

相关文章

  • js设置光标插入文字和HTML

    代码一:在textarea某个位置插入文本 代码二:设置光标位置 jQuery版本 代码三:获取光标位置 代码四:...

  • 【iOS开发】自定义UITextField

    一、 UITextField的基本使用 设置光标颜色 设置输入文字颜色 通过代理设置开始输入和结束输入时占位文字的...

  • EditText使用总结

    获取光标位置 在光标处插入字符 删除光标前字符 选中文字 点击EditText获取焦点显示光标且不弹出软键盘 处理...

  • vim 编辑器的使用

    Esc 从插入模式到命令模式i 光标前插入字符I 在光标所属行首插入a 光标后插入字符A 在光标所属行末插入o ...

  • CSS的文本样式属性值

    HTML编辑文本,通过CSS的设置属性赋予HTML网页活力,改变文字类型、背景以及插入图片、视频、音频等,使网页更...

  • 2021-02-20

    a 光标后插入A 行尾插入 i 光标前插入I 行首...

  • UITextField 光标、占位文字、输入监听及格式相关的知识

    隐藏光标 设置光标距左边的位置 同理修改左侧搜索默认的icon图片? 设置占位文字字体大小和颜色 键盘类型 清除按...

  • JS学习(1)

    一,插入JS 使用 标签在HTML网页中插入javascript。 . 二、引用JS外部文件 JS代码可写到jav...

  • JavaScript入门篇

    1.为什么学习javaScript.html 2.如何插入js.html 3.引入JS外部文件.html 4.JS...

  • 一、javascript用法

    如果需要在HTML页面中插入js,js必须位于 标签之间。js可以放在HTML页面的 和 中,或同时存在于两个部...

网友评论

      本文标题:js设置光标插入文字和HTML

      本文链接:https://www.haomeiwen.com/subject/oehbwctx.html