javascript获取光标位置以及设置光标位置

原文转载自:

  http://www.cnblogs.com/johnvajicic/archive/2013/05/17/3084674.html

在项目开发中经常遇到input等设置光标位置到最后的问题,在IEFirefoxOpera等主流浏览器的获取光标位置(getCursortPosition)以及设置光标位置(setCursorPosition)的函数。

function getCursortPosition (ctrl) {//获取光标位置函数
	var CaretPos = 0;	// IE Support
	if (document.selection) {
	ctrl.focus ();
		var Sel = document.selection.createRange ();
		Sel.moveStart ('character', -ctrl.value.length);
		CaretPos = Sel.text.length;
	}
	// Firefox support
	else if (ctrl.selectionStart || ctrl.selectionStart == '0')
		CaretPos = ctrl.selectionStart;
	return (CaretPos);
}
PS:参数ctrl为input或者textarea对象



function setCaretPosition(ctrl, pos){//设置光标位置函数
	if(ctrl.setSelectionRange)
	{
		ctrl.focus();
		ctrl.setSelectionRange(pos,pos);
	}
	else if (ctrl.createTextRange) {
		var range = ctrl.createTextRange();
		range.collapse(true);
		range.moveEnd('character', pos);
		range.moveStart('character', pos);
		range.select();
	}
}
PS:参数ctrl为input或者textarea对象,pos为光标要移动到的位置。

//以下是文本替换后,光标始终保持在最后的js

 function replaceAndSetPos(obj, pattern, text,e) {
  var event = e||window.event;
  if (event.altKey || event.ctrlKey || event.keyCode == 16
    || event.keyCode == 17 || event.keyCode == 18
    || (event.shiftKey && event.keyCode == 36))
   return;
  var pos = getCursortPosition(obj);// 保存原始光标位置
  var temp = obj.value; // 保存原始值
  obj.value = temp.replace(pattern, text);// 替换掉非法值
  pos = pos - (temp.length - obj.value.length);// 当前光标位置

  setCaretPosition(obj, pos);//设置光标
 }

posted on 2016-03-28 17:33  zgz2016  阅读(1054)  评论(0)    收藏  举报

导航