成的区域 (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为当前输入的字符,
