Opera下textarea的selection问题,被搞死了。。。

最近工作需要写了一个工具方法用来在textarea里面插入文本,代码如下:

    ctx.insertText = function (el, txt) {
        var dom = el.get(0);
        if (window.getSelection) {
            var start = dom.selectionStart, end = dom.selectionEnd, temp = dom.value;
            dom.value = temp.substring(0, start) + txt + temp.substring(end, temp.length);
            dom.selectionStart = dom.selectionEnd = start + txt.length;
        } else if (document.selection) {
            var range = document.selection.createRange();
            range.text = txt; range.collapse(false); range.select();
        } else {
            dom.value += txt;
        }
    };

测试了几个浏览器一切正常,直到测试Opera悲剧了。

内容虽然正常的插入了,可是选择域出问题了,总是会把光标后面所有的内容选中,如下图:

百思不得其解,解决不了后面放弃掉了,过了很多天,哥看到这个issue还是很刺眼,今天回来重新对付这个问题。

研究了半天,猜测了一下,哥简单的将这句代码:

dom.selectionStart = dom.selectionEnd = start + txt.length;

更改成:

dom.selectionEnd = dom.selectionStart = start + txt.length;

没错就是先赋值selectionEnd属性,然后所有事情都搞定。。。哥是相当的无语啊,这个可是Opera的bug????

浏览器没那么聪明!
原文地址:https://www.cnblogs.com/rulee/p/2421604.html