隨筆 - 11  文章 - 3  trackbacks - 0
          <2010年1月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          常用鏈接

          留言簿

          隨筆檔案

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          關于UTF8頁面中文COOKIE個人解決辦法:

          1.使用cgi語言將中文轉換成unicode編碼,如"\u****";
          2.將unicode編碼寫入cookie;
          3.使用js轉換此unicode,如:
          unescape(CE.cookie.get("***").replace(/\\/g,"%"))

          搞定!不知道還有沒有更好的解決方案,或者該方法是否存在一些漏洞問題??
          posted @ 2010-05-25 13:40 jacklau 閱讀(178) | 評論 (0)編輯 收藏
          關于鏈接<a>上面直接寫javascript事件的問題,今天組內討論了一下,小寫一下:

          常見的寫法有:

          1.<a href="javascript:fun()"></a> //直接在href屬性中執行fun事件
          2.<a href="javascript:void(0)" onclick = "fun();"></a> //在onclick屬性中執行fun事件
          3.<a href="#" onclick = "fun();return false;"></a> //href屬性指向"#",而onclick事件中return false阻止默認行為

          最終投票決定使用第三種方法,前兩種方法在IE6都會是gif或其他可以動畫效果的東東靜止掉。。。具體原因應該是瀏覽器渲染問題吧,呵呵

          第三種方法也有用到針對SEO方面的應用,比如我有一個連接是到一個靜態頁面a.html,但是由于需求方面的問題需要通過一個cgi再跳轉到a.html,如:b.cgi?uri=a.html,這樣的寫成:<a href="a.html" onclick="window.open('b.cgi?uri=a.html');return false;">XXX</a>表面上可以解決了問題,但是這種算不算是SEO的URL欺騙行為呢?
          posted @ 2010-01-26 11:20 jacklau 閱讀(389) | 評論 (0)編輯 收藏

          主要功能:
          1.拖動
          2.可配置相對位置
          3.平滑移動

          CE.Tween = {
           plcMove : function(o, a, s, e, callback, speed){
            var sTime = +new Date(), p, speed = speed || 100;
            var iTimer = setInterval(function(){
             p = (+new Date() - sTime) / speed;
             if(p >= 1){
              o.style[a] = e + "px";
              callback && callback.call(o);
              o = null;
              return clearInterval(iTimer);
             }
             o.style[a] = s + (e - s) * ((-Math.cos(p * Math.PI) / 2) + 0.5) + "px";
            }, 10);
           }
          };

          CE.Util.Drag 
          = {
              dcount : 
          0,
              dList : {},
              bind : function(c,obj){
                  var _this 
          = CE.Util.Drag;

                  var _d 
          = obj.d || c;

                  
          if(!_d){return;}

                  
          if(!_d.did){

                      _d.did 
          = _this.dcount++;

                      _this.dList[_d.did] 
          = _d;

                      var _x ,_y,_isdown 
          = false,_scape = null,_p = null;

                      _d.style.cursor 
          = "move";

                      var down 
          = function(e){
                          _isdown 
          = true;

                          _p 
          = obj.refer || document.body;

                          _x 
          = e.clientX - _d.offsetLeft; //初始坐標
                          _y = e.clientY - _d.offsetTop;

                          
          if(null == _scape){
                              _scape 
          = document.createElement("div");
                              _p.appendChild(_scape);
                          }

                          _scape.style.border 
          = "1px dotted #06459c";
                          _scape.style.position 
          = "absolute";
                          _scape.style.zIndex 
          = c.style.zIndex + 1 || 1;
                          _scape.style.width 
          = c.style.width;
                          _scape.style.height 
          = c.style.height;
                          _scape.style.left 
          = c.offsetLeft + "px";
                          _scape.style.top 
          = c.offsetTop + "px";

                          c.style.filter 
          = "Alpha(Opacity=60)";
                          c.style.opacity 
          = 0.6;

                          
          if(_scape){
                              CE.Event.addListener(document,
          "mousemove",move);
                              CE.Event.addListener(document,
          "mouseup",up);
                              document.onselectstart 
          = function() {return false};
                              
          if(window.getSelection){ //非ie
                                  window.getSelection().removeAllRanges();
                              }
                          }
                      };
                      var move 
          = function(e){
                          
          if(!_isdown){return};
                          _scape.style.left 
          = e.clientX - _x + "px";
                          _scape.style.top 
          = e.clientY - _y + "px";
                      };
                      var up 
          = function(){
                          _isdown 
          = false;
                          
          if(_scape){
                              
          if(obj.tween){
                                  CE.Tween.plcMove(c,
          "top",parseInt(c.style.top, 10),_scape.offsetTop);
                                  CE.Tween.plcMove(c,
          "left",parseInt(c.style.left, 10),_scape.offsetLeft);
                              }
          else{
                                  c.style.left 
          = _scape.offsetLeft + "px";
                                  c.style.top 
          = _scape.offsetTop + "px";
                              }
                              c.style.filter 
          = "Alpha(Opacity=100)";
                              c.style.opacity 
          = 1;
                              _scape.style.zIndex 
          = c.zIndex - 1 || -1;
                              _p.removeChild(_scape);
                              _p 
          = null;
                              _scape 
          = null;
                              document.onselectstart 
          = function() {return true};
                          }
                      };
                      CE.Event.addListener(_d,
          "mousedown",down);
                  }
          else{
                      
          for(var item in _this.dList){
                          
          if(_d.did === item.did){
                              
          return;
                          }
                      }
                  }
              }
          };
          posted @ 2010-01-17 12:16 jacklau 閱讀(189) | 評論 (0)編輯 收藏
          特點:
          1.支持fn參數中使用this關鍵字
          2.相同fn綁定無效

          缺點:
          非ie下不能直接使用匿名函數直接當參數傳遞,這個誰有比較好的解決辦法么?


          CE.Event = {
              handler : 
          function(e){
                  e 
          = e || window.event;
                  
          var _fn = "_" + e.type;
                  
          if(this[_fn]){
                      
          for(var _f in this[_fn]){
                          
          this[_fn][_f].call(this,e);
                      }

                  }

              }
          ,
              bind : 
          function(obj, act, fn, capture){
              
          if(window.addEventListener){
                      obj.addEventListener(act,fn,capture 
          || false);
                  }
          else{
                      
          var _fn = "_" + act;
                      act 
          = "on" + act;
                      
          if(!obj[_fn]){
                          obj[_fn] 
          = [];
                          obj[act] 
          = CE.Event.handler;
                      }
          else{
                          
          for(var _f in obj[_fn]){
                              
          if(obj[_fn][_f].toString() === fn.toString()){return};
                          }

                      }

                      obj[_fn][obj[_fn].length] 
          = fn;
                  }

              }
          ,
              unbind : 
          function(obj, act, fn, capture){
                  
          if(window.removeEventListener){
                      obj.removeEventListener(act,fn,capture 
          || false);
                  }
          else{
                      
          var _fn = "_" + act;
                      
          if(obj[_fn]){
                          
          for(var _f in obj[_fn]){
                              
          if(obj[_fn][_f].toString() === fn.toString()){
                                  
          try{
                                      
          delete obj[_fn][_f];
                                  }
          catch(e){
                                      obj[_fn][_f] 
          = null;
                                  }

                                  
          return;
                              }

                          }

                      }

                  }

              }

          }
          ;

          提升了一下執行效率:

          CE.Event = {
              ecount : 
          1,
              handler : 
          function(e){
                  e 
          = e || window.event;
                  
          if(this.evns[e.type]){
                      
          for(var evn in this.evns[e.type]){
                          
          this.evns[e.type][evn].call(this,e);
                      }
                  }
              },
              bind : 
          function(obj, act, fn, capture){
                  
          if(window.addEventListener){
                      obj.addEventListener(act,fn,capture 
          || false);
                  }
          else{
                      
          if(!fn.id){fn.id = CE.Event.ecount++};
                      
          if(!obj.evns){obj.evns = {}};
                      
          if(!obj.evns[act]){
                          obj.evns[act] 
          = {};
                          
          if(obj["on" + act]){
                              obj.evns[act][
          0= obj["on" + act];
                          }
                      }
          else{
                          
          for(var evn in obj.evns[act]){
                              
          if(evn.id === fn.id){return;}
                          }
                      }
                      obj.evns[act][fn.id] 
          = fn;
                      obj[
          "on" + act] = CE.Event.handler;
                  }
              },
              unbind : 
          function(obj, act, fn, capture){
                  
          if(window.removeEventListener){
                      obj.removeEventListener(act,fn,capture 
          || false);
                  }
          else{
                      
          if(obj.evns && obj.evns[act]){
                          
          try{
                              
          delete obj.evns[act][fn.id];
                          }
          catch(e){
                              obj.evns.act[fn.id] 
          = null;
                          }
                          
          return;
                      }
                  }
              }
          };
          posted @ 2010-01-14 01:17 jacklau 閱讀(224) | 評論 (1)編輯 收藏
          1.匹配電話號碼(國內)
             (?:\(?(?:[\+0]?)[0-9]+?[\)?-])?[0-9]{3,4}(?:-?)[0-9]{7,8}(?:(?:-?)[0-9]+)?
             匹配:01012345678,010-12345678,+86-010-12345678,(86)010-1234567,(086)010-12345678 等等

          posted @ 2010-01-08 19:03 jacklau 閱讀(177) | 評論 (0)編輯 收藏
          新寫了一個兼容ie,ff的Storage類,主要實現:
          1.存儲,
          2.獲取,
          3.刪除,

          數據支持字符串/json

          以下是源碼:

          Storage = (function(){
              var isInit 
          = false;
              var obj 
          = null;
              var defDay 
          = 365;
              var isIE 
          = ("\v" == "v");
              var ikey 
          = "Tenpay_Default_Data";
              var domain 
          = document.domain; //或者提取自己框架的
              var initObj = function(){
                  
          if(isIE){
                      obj 
          = document.createElement("div");
                      obj.id 
          = "Default_JData_id";
                      obj.style.behavior 
          = "url('#default#userData')"
                      document.body.appendChild(obj);
                      isInit 
          = true;
                  }
              };
              var setExpire 
          = function(day){
                  defDay 
          = day;
              };
              var jsonToStr 
          = function(json){
                  var list 
          = [];
                  
          if("string" === typeof(json)) return "\""+ json.replace(/([\'\"\\])/g,"\\$1").replace(/(\n)/g,"\\n").replace(/(\r)/g,"\\r").replace(/(\t)/g,"\\t")+"\"";
                  if("number" === typeof(json)) return json;
                  
          if("undefined" === typeof(json)) return "undefined";
                  
          if("object" === typeof(json)){
                      
          if(null === json){return null}
                      
          else if("function" === typeof(json.sort)){
                          
          for(var i = 0,len = json.length; i < len; i++){
                              list.push(jsonToStr(json[i]));
                          }
                          
          return "["+ list.join() +"]";
                      }
          else{
                          
          for(var i in json){
                              list.push(i 
          + ":" + jsonToStr(json[i]));
                          }
                          
          return "{"+ list.join() +"}";
                      }
                  }
              };
              var strToJson 
          = function(str){
                  
          return eval('('+ str +')');
              };
              var setData 
          = function(name, value, domain_name, key, day){
                  ikey 
          = key || ikey;
                  domain 
          = domain_name || domain;
                  
          if(!isInit){initObj()};
                  
          if(value instanceof Object){
                      value 
          = jsonToStr(value);
                  }
                  var d 
          = new Date(),exps = (null != day ? day : defDay);
                  d.setSeconds(d.getSeconds() 
          + exps * 24 * 3600);
                  
          try{if(isIE){
                      obj.load(ikey);
                      obj.setAttribute(name, value);
                      obj.expires 
          = d.toUTCString();
                      obj.save(ikey);
                  }
          else if(window.globalStorage){
                       globalStorage[domain][ikey 
          + "__" + name] = value;
                       globalStorage[domain][ikey 
          + "__expire"= d.getTime();
                  }}
          catch(e){}
              };
              var getData 
          = function(name, domain_name, key){
                  ikey 
          = key || ikey;
                  domain 
          = domain_name || domain;
                  
          if(!isInit){initObj()};
                  
          try{
                
          if(isIE){
                      obj.load(ikey);
                      
          return /^\{.*\}$|^\[.*\]$/.test(obj.getAttribute(name)) ? strToJson(obj.getAttribute(name)) : obj.getAttribute(name);
                    }
          else if(window.globalStorage){
                  var now 
          = parseFloat((new Date()).getTime()), exp = parseFloat(globalStorage[domain][ikey + "__expire"]);
                  
          if (exp > now) {
                        
          return /^\{.*\}$|^\[.*\]$/.test(globalStorage[domain][ikey + "__" + name]) ? strToJson(globalStorage[domain][ikey + "__" + name]) : globalStorage[domain][ikey + "__" + name];
                  }
          else {
                    delData(name, key);
                  }
                    }
              }
          catch(e) {
                
          //exception
              }
                  
          return "";
              };
              var delData 
          = function(name, domain_name, key){
                  ikey 
          = key || ikey;
                  domain 
          = domain_name || domain;
                  
          if(!isInit){initObj()};
              
          try {
                  
          if(isIE){
                      obj.load(ikey);
                      obj.removeAttribute(name);
                      obj.save(ikey);
                  }
          else if(window.globalStorage){
                      globalStorage[domain][ikey 
          + "__" + name] = undefined;
                      globalStorage[domain].removeItem(ikey 
          + "__" + name);
                  }
              }
          catch (e) {}
              };
              
          return {
                  setExp : setExpire,
                  set : setData,
                  get : getData,
                  del : delData
              };
          })();
          posted @ 2010-01-06 22:28 jacklau 閱讀(247) | 評論 (0)編輯 收藏
          https協議空請求ie下報安全警告,很糾結的問題啊,
          比如我使用一個<iframe>,src屬性為:about:blank,javascript:void(0),javascript://在ie下都會報安全警告,

          后來發現了一個hack,javascript:'',以為終于可以自喜,上線后居然xp sp2又報錯了,本來最近老是出錯,又出現了這個BUG,真的是要吐血了,沒辦法還是改回了指向一個空白頁面

          難道就沒有更好的辦法了么?
          posted @ 2010-01-06 11:01 jacklau 閱讀(365) | 評論 (0)編輯 收藏
          條件語句,為啥要將常量寫在前面?

          發現有人寫js代碼的時候這樣的:
          if("xx" == a){};//a變量

          為啥要將常量寫在前面呢?后來發現了一個規律,就是如果編碼中少些一個“=”,如:if("xx" = a){}//這樣的話瀏覽器會提示:不能給[String]賦值錯誤,這樣子的話會很快定位到錯誤,如果是:if(a = "xx"){}//多數情況下次條件始終滿足,如果出現問題,定位起來就會很糾結,最后也會比較囧,呵呵。。

          那還有沒有其他的可比之處呢?
          posted @ 2010-01-01 10:27 jacklau 閱讀(698) | 評論 (1)編輯 收藏
          主站蜘蛛池模板: 西平县| 碌曲县| 道真| 同德县| 格尔木市| 江油市| 墨脱县| 柳江县| 右玉县| 大兴区| 永康市| 阿图什市| 荆门市| 米脂县| 红河县| 那曲县| 防城港市| 晋宁县| 康定县| 招远市| 寻乌县| 巍山| 都匀市| 东阳市| 青铜峡市| 罗定市| 太康县| 高台县| 常熟市| 白朗县| 朝阳市| 康定县| 高邑县| 芦溪县| 象州县| 浦县| 车险| 清徐县| 酉阳| 广灵县| 兴文县|