接上回,这次只贴用到的工具函数代码。
//********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:贴出完整代码,及测试程序】