vapour's blog

7Jul/110

跨浏览器实现全选功能

跨浏览器实现全选功能,IE一行代码就OK,标准浏览器就比较麻烦了,需要使用selection、range、addRange实现。

var selectAll = (function () {
   if (arale.isIE()) { //IE
      return function (win) {
         win = win || window;
         win.document.body.createControlRange().execCommand('SelectAll');
      }
   } else { //标准浏览器
      return function (win) {
         var s, r;
         win = win || window;
         doc = win.document;
         s = win.getSelection();
         r = doc.createRange();

         r.selectNode(doc.body);
         s.addRange(r);
      }
   }
})();

26Nov/101

移动焦点到最后

当输入框(input/textarea)获得焦点时,将焦点移动到最后,在某些情况下用户体验很好。网上的大部分方法都是针对IE浏览器的。代码如下:

var el = document.getElementById('txtArticle');
var range = el.createTextRange();
range.moveStart('character', el.value.length);
range.collapse(false);
range.select();

其实可以将moveStart这行删除,因为createTextRange方法创建range后,利用collapse方法,参数为false就可以移动到最后了。collapse(true)移动光标到range的开始,collapse(false)移动光标到range的结尾。 Firefox等标准浏览器可以使用w3c的setSelectionRange方法。代码如下:

var range, el = document.getElementById('txtPhone');
if (el.setSelectionRange) {
   el.focus();
   el.setSelectionRange(el.value.length, el.value.length)
} else {
   range = el.createTextRange();
   range.collapse(false);
   range.select();
}

注意setSelectionRange方法仅适用于input/textarea元素。其它非原生的可编辑元素的焦点移到可以利用selection对象的collapse方法,例如:

var sel, el = document.getElementById('hint');
sel = window.getSelection();
sel.collapse(el, 1);
el.focus();

关于这方面更详细的资料可参考

  • IE selection http://msdn.microsoft.com/pl-pl/library/aa768849(en-us,VS.85).aspx
  • IE TextRange http://msdn.microsoft.com/pl-pl/library/ms535872(v=VS.85).aspx
  • mozilla selection https://developer.mozilla.org/en/DOM/selection
  • mozilla range https://developer.mozilla.org/en/DOM/range
Tagged as: , 1 Comment