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();
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();
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();
}
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();
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