接上回,这次只贴用到的工具函数代码。
//********cursorX*********
//获取或者设置光标位置 测试地址 http://jsbin.com/ibiwa6
//pos参数 integer 光标位置
//传入此参数将光标置于pos位置
//不设置次参数将返回光标位置
function cursorX(textareaID,pos){
var iCursorX = 0;
var obj = document.getElementById(textareaID);
if(document.selection){//IE
var rng = document.selection.createRange();
if(pos === undefined){//get
obj.focus();
if(rng === null){
iCursorX = 0;
}
var re = obj.createTextRange(),
rc = re.duplicate();
re.moveToBookmark(rng.getBookmark());
rc.setEndPoint('EndToStart',re);
iCursorX = rc.text.length;
}else if(typeof pos === "number"){//set
obj.focus();
var range = obj.createTextRange();
range.collapse(true);
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();
}
}else{//other browser
if(pos === undefined){//set
iCursorX = obj.selectionStart;
}else if(typeof pos === "number"){// get
//curScrollTop saved by other function,default:0
//obj.scrollTop = this.curScrollTop;
obj.focus();
obj.selectionEnd = pos;
obj.selectionStart = pos;
}
}
return iCursorX;
}
//**********escapeReg**********
//字符串拼成regex对象的前过滤
//(不是原创)
function escapeReg(a){
for(var b = [], c = 0; c < a.length; c ++ )
{
var e = a.charAt(c);
switch(e)
{
case "." :
b.push("\\x2E");
break;
case "$" :
b.push("\\x24");
break;
case "^" :
b.push("\\x5E");
break;
case "{" :
b.push("\\x7B");
break;
case "[" :
b.push("\\x5B");
break;
case "(" :
b.push("\\x28");
break;
case "|" :
b.push("\\x28");
break;
case ")" :
b.push("\\x29");
break;
case "*" :
b.push("\\x2A");
break;
case "+" :
b.push("\\x2B");
break;
case "?" :
b.push("\\x3F");
break;
case "\\" :
b.push("\\x5C");
break;
case "/" :
b.push("\\x2F");
break;
default :
b.push(e);
}
}
return b.join("");
};
//**********stopDefault**********
//阻止事件的默认行为
function stopDefault(e){
if ( e && e.preventDefault )
e.preventDefault();
else
window.event.returnValue = false;
return false;
};
还有其它用到的函数,不值得重用,没有单独分出来。在这里做简单的解释,明白思路即可。
待续……【todo:贴出完整代码,及测试程序】