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????
浏览器没那么聪明!