javascript自动填充插件【续1】


接上回,这次只贴用到的工具函数代码。

//********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:贴出完整代码,及测试程序】