动态获取光标像素坐标(2)

  检索开始位置,即事件触发时光标所在位置,直白来说,就是把事件触发时光标所在位置 currentPos 赋值给 oldCurrentPos 储存起来,然后与新的 currentPos 组

  成的区域 (oldCurrentPos,currentPos)就是我们检索值所在区域 

// 获取检索值开始位置 oldCurrentPos var getOldCurrentPos = function(){ getStart(); // 开始输入的时候的光标位置 currentPos oldCurrentPos = currentPos; // 储存输入开始位置 console.log(oldCurrentPos); }

  设置光标位置

  选择当前项重组输入框 value 值后光标是默认显示在最后的,这当然不符合我们的开发需求,我们想要的效果是事件结束时光标能在我们编辑结束的位置(关于value值重组我们在下面的方法中再看)               

// 设置光标位置 var setCarePosition = function(start,end) { if(navigator.userAgent.indexOf("MSIE") > -1){ var all_range = ''; if( _this.get(0).tagName == "TEXTAREA" ){ // 根据body创建textRange all_range = document.body.createTextRange(); // 让textRange范围包含元素里所有内容 all_range.moveToElementText(_this.get(0)); } else { // 根据当前输入元素类型创建textRange all_range = _this.get(0).createTextRange(); } _this.focus(); // 将textRange的start设置为想要的start all_range.moveStart('character',start); // 将textRange的end设置为想要的end. 此时我们需要的textRange长度=end-start; 所以用总长度-(end-start)就是新end所在位置 all_range.moveEnd('character',-(all_range.text.length-(end-start))); // 选中从start到end间的文本,若start=end,则光标定位到start处 all_range.select(); }else{ // 文本框获取焦点 _this.focus(); // 选中从start到end间的文本,若start=end,则光标定位到start处 _this.get(0).setSelectionRange(start,end); } };

  结束检索事件

  在结束检索事件中我们需要初始化下拉框以及关闭开关,这里需要将该方法声明在获取检索值方法前面,因为获取值后整个事件流程结束,我们需要初始化变量为下一次事件触发做好准备             

// 结束检索事件 var endSearch = function(){ _this.dropdown.find("li").remove(); // 移除下拉框中的选项 _this.dropdown.hide(); // 隐藏下拉框 searchStart = false; // 初始化检索开关 searchStart enterCharacter=''; // 初始化当前字符 }

  获取检索的值

   看下方代码,我们能够获取值的前提是 searchStart 开关 打开状态,这里我们为了保持插件的灵活性,将触发字符设置为变量,这里默认为 $ 和 . ,enterCharacter为当前输入的字符,

因为当我们输入 . 时,selectVal 的获取规则会改变,所以这里我们需要将 selectVal 获取方式区分开来,注意:这里我们要考虑到存在一个操作 -- 回删,输入 $,下拉框出来了,但是我

们又觉得此处 $ 出现得还不是时候(反正就是要删),删除 $,那么检索事件也就结束,初始化相关变量。当输入的是 . 时,如果要替换值,那么我们需要的获取从 . 在的位置往后找

   到离 . 最近的 $ 符号,得到其在文本中的位置,这样我们才能重组 value            

// 获取检索的值 selctVal var getSelectVal = function(){ var val = _this.val(); if( searchStart == true && enterCharacter != opts.levelCharacter ){ // 当输入的是字符 triggerCharacter 的时候 默认为 $ selectVal = val.substring(oldCurrentPos,currentPos); // 检索值直接为获取的文本区域 } if( searchStart == true && enterCharacter == opts.levelCharacter ){ // 当输入的是字符 levelCharacter 的时候 默认为 . dotVal = val.slice(0,currentPos); dotDollerPos = dotVal.lastIndexOf(opts.triggerCharacter)+1; dotSelectVal = dotVal.substring(dotDollerPos,currentPos); selectVal = dotSelectVal; console.log("到当前下标的字符串为:"+dotVal); console.log("到当前下标最近的$下标是:"+dotDollerPos); console.log("输入 . 时检索值为:"+dotSelectVal); } console.log("获取的值区域为:"+oldCurrentPos+"-"+currentPos); if( oldCurrentPos > currentPos ){ // 回删时清除选项li 隐藏下拉框 endSearch() } }

  改变输入框 value 值,定位光标位置

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://127.0.0.1/wyygzw.html