posts - 7,  comments - 8,  trackbacks - 0
          此前的版本,只支持一個頁面一次使用,后來我結合prototype等js的思想,稍做改進,使之對象封閉性進一步加強.同一頁面可多次實例化顯示數據.并且保存其實例句柄. http.js的內容也封裝到XMLDATA 內.并且顯示內容格式的可控性更好些,不過還是不很理想
                  pageSize : 12, 分頁條數
                  showPages : true, 是否顯示分頁
                  container : "showXml", 顯示數據容器(如:<div id="showXml"></div>)
                  pageadd : "pageadd", 保存當前頁號的容器(<input type="hidden" id="
          pageadd" name="pageadd"/>)
                  next : "next", 顯示下一頁鏈接的容器
                  next2 : "next2", 顯示最后一頁的容器
                  pre : "pre", 顯示上一頁鏈接的容器
                  pre2 : "pre2",顯示第一頁
          鏈接容器
                  pagecount : "pagecount",保存總頁數的容器
                  pagination : "pagination",
                  aClass : "",鏈接CSS樣式
                  tbHead : "",頭
                  tbFoot : "",尾
                  tdHeight : -1 行高
          這些都可在實例化時可改變的項,如:
          new XMLDATA(xmlurl,{
          showPages:false,tdHeight:24});

            1 String.prototype.replaceAll = stringReplaceAll;
            2 function stringReplaceAll(AFindText,ARepText){
            3  var raRegExp = new RegExp(AFindText.replace(/([\(\)\[\]\{\}\^\$\+\-\*\?\.\"\'\|\/\\])/g,"\\$1"),"ig");
            4  return this.replace(raRegExp,ARepText);
            5 }
            6 XMLDATA = Class.create();
            7 Object.extend(XMLDATA,{instance:new Array(),count:0,literals : new Array("確定要刪除?","確定要執行操作?"),
            8 paginHTML : "<input type=\"hidden\"id=\"search_category\"/> <input type=\"hidden\" id=\"pageadd\" value=\"0\"/><span id=\"pagecount\"></span>        <span id=\"pre2\"><A href=\"javaScript:#{ins}.searchclass();\" class=\"cn12a gry\" >[首頁]</A></span> <span id=\"pre\"><A href=\"javaScript:#{ins}.list('sub');\" class=\"cn12a gry\">[上一頁]</A></span> <span id=\"next\"><A href=\"javaScript:#{ins}.list('in');\" class=\"cn12a gry\">[下一頁]</A></span> <span id=\"next2\"><A href=\"javaScript:#{ins}.list(#{ins}.maxPage);\" class=\"cn12a gry\">[末頁]</A></span>",
            9 clear:function(){for(i=0;i<this.count;i++){this.instance[i]=null;}this.instance = new Array();this.count=0;}});
           10 XMLDATA.prototype = {
           11 maxPage : 1,data : "",num : 0,page : 0,url : "",handle : -1,
           12 /******************* http *****************************/
           13 xmlHttp : null,
           14 callBack : function (){},
           15 createXMLHttpRequest : function (){
           16  if(window.ActiveXObject){
           17   this.xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
           18  }
           19  else if(window.XMLHttpRequest){
           20   this.xmlHttp = new XMLHttpRequest();
           21  }
           22 },
           23 get : function (url){
           24  this.createXMLHttpRequest();
           25  try{
           26  this.xmlHttp.open("GET",url,true);
           27  this.xmlHttp.onreadystatechange = this.startCallback.bind(this);
           28  this.xmlHttp.send(null);
           29  }catch(e){alert(e.message);}
           30 },
           31 startCallback : function (){
           32  if(this.xmlHttp.readyState == 4){
           33   if(this.xmlHttp.status == 200){
           34    this.callBack();
           35   }
           36  }},
           37 /******************* http *****************************/
           38 setOptions: function(options) {
           39     this.options = {
           40         pageSize : 12,
           41         showPages : true,
           42         container : "showXml",
           43         pageadd : "pageadd",
           44         next : "next",
           45         next2 : "next2",
           46         pre : "pre",
           47         pre2 : "pre2",
           48         pagecount : "pagecount",
           49         pagination : "pagination",
           50         aClass : "",
           51         tbHead : "",
           52         tbFoot : "",
           53         tdHeight : -1
           54     }
           55     Object.extend(this.options, options || {});
           56 },
           57 initialize : function(baseUrl,options) {
           58         XMLDATA.instance[XMLDATA.count++]=this;
           59         this.handle = XMLDATA.count - 1;
           60         this.baseUrl = baseUrl;
           61         this.url = baseUrl;
           62         this.setOptions(options);
           63         if(this.options.showPages){this.$(this.options.pagination).innerHTML = XMLDATA.paginHTML.replaceAll("#{ins}","XMLDATA.instance["+this.handle+"]");}
           64         this.list();
           65 },
           66 load : function(){
           67     if(this.data == "Microsoft"){
           68         var doc = new ActiveXObject( "Microsoft.XMLDOM" );
           69         doc.async = false;
           70         doc.load(this.url);
           71         this.parse(doc);
           72     }else if(""!=this.data){
           73         var p = new DOMParser();
           74         try{
           75         var doc = p.parseFromString(this.data,"text/xml");
           76         }catch(e){return;}
           77         this.parse(doc);
           78     }
           79 },
           80 initDom : function (){
           81 if(window.DOMParser)//firefox內核的瀏覽器
           82 {
           83     this.callBack = function (){
           84         this.data = this.xmlHttp.responseText;
           85         this.load();
           86     };
           87     this.get(this.url);
           88     return true;
           89 }
           90 else if( window.ActiveXObject )//ie內核的瀏覽器
           91 {
           92     this.data = "Microsoft";
           93     this.load();
           94     return true;
           95 }
           96 else
           97     return false;
           98 },
           99 searchclass : function ()
          100 {
          101     this.setPageadd(0);
          102     this.list();
          103 },
          104 getPageadd : function(){
          105     return this.options.showPages?this.$(this.options.pageadd).value:this.page;
          106 },
          107 setPageadd : function(v){
          108     if(this.options.showPages)
          109         this.$(this.options.pageadd).value = v;
          110 },
          111 xmlRefresh : function (){
          112     this.list(this.getPageadd());
          113 },
          114 $ : function (f){
          115     return document.getElementById(f);
          116 },
          117 showMsg: function(msg){
          118     this.$(this.options.container).innerHTML = msg;
          119 },
          120 execute : function (url){
          121     this.showMsg("正在執行操作");
          122     this.callBack = function (){
          123         var r = this.xmlHttp.responseText;
          124         if(r=="1")
          125             this.showMsg("操作成功,正在加載數據");
          126         else
          127             this.showMsg("操作失敗,正在加載數據");
          128         setTimeout("XMLDATA.instance["+this.handle+"].xmlRefresh()",1000);
          129     };
          130     this.get(url);
          131 },
          132 list : function (fun){
          133     this.showMsg("正在加載數據");
          134     var n;
          135     n = parseInt(this.getPageadd());
          136     if(isNaN(parseInt(fun))){
          137         if(fun == "sub"){n = n - 1;}else{n = n + 1;}
          138     }else{
          139         n = parseInt(fun);
          140     }
          141     this.displayPre(!(n <= 1));
          142     this.displayNext(false);
          143     this.setPageadd(n);
          144     this.page = n;
          145     this.url = this.baseUrl.replaceAll("#[page]",n).replaceAll("#[size]",this.options.pageSize);
          146     if(!this.initDom()){
          147         this.showMsg("沒有找到任何數據!");
          148     }else {
          149 
          150     }
          151   },
          152 getNodeText : function(nodes,o){
          153     return nodes.getElementsByTagName(o)[0]?nodes.getElementsByTagName(o)[0].firstChild.nodeValue:"";
          154   },
          155 nextNode : function(root,i){
          156     return root.childNodes[i];
          157   },
          158 getAttribute : function(node,name){
          159     for(i=0;i<node.attributes.length;i++)
          160     if(name==node.attributes[i].name)
          161         return node.attributes[i].value;
          162     return null;
          163   },
          164 getNodeName : function(node){
          165      return node.nodeName;
          166 },
          167 getNodeValue : function(node){
          168     return node.firstChild.nodeValue;
          169 },
          170 parse : function(xmldoc){
          171     var n = this.page;
          172     var xmlroot = xmldoc.documentElement;
          173       var showStr = '<table width="100%" border="0" cellspacing="0" cellpadding="0">';
          174       var j,i,num;
          175       var node = xmlroot.childNodes.length;
          176       var nodes;
          177       var nodeId;
          178       i = 0;
          179       while(i != node){
          180             showStr += "<tr>";
          181               nodes = this.nextNode(xmlroot,i);
          182               if(i == 0)
          183               {
          184               this.maxPage = this.getNodeText(nodes,"page");
          185               this.options.pageSize = parseInt(this.getNodeText(nodes,"size"));
          186               this.displayNext(!(node<this.options.pageSize));
          187               if(this.options.showPages){this.$(this.options.pagecount).innerHTML = '第 '+n+' 頁'+'(共'+this.getNodeText(nodes,"page")+'頁)';}
          188               var hiddiv = (this.getNodeText(nodes,"hiddiv")=="true");
          189               }
          190               this.displayNext(this.maxPage>1 && n<this.maxPage);
          191               if(nodes == null)
          192               {
          193                 showStr += '</tr></table>';
          194                 this.showMsg(showStr);
          195                 return;
          196               }
          197              if(i == 0){showStr += this.options.tbHead;}//this.getNodeText(nodes,"head");}
          198              j=0;
          199              nodes_its = nodes.childNodes;
          200              num = nodes_its.length;
          201              while(j != num){
          202               nnn = this.nextNode(nodes,j);
          203               j++;
          204               if(nnn == null)
          205               {
          206                 break;
          207               }
          208               if(this.getNodeName(nnn)!="pro"){
          209                   if(this.getNodeName(nnn)=="id"){nodeId=this.getNodeValue(nnn);}
          210                   continue;}
          211               if(this.options.tdHeight==-1){showStr += "<td>";}else{
          212                   showStr += "<td height=\""+this.options.tdHeight+"\">";
          213               }
          214               if(this.getAttribute(nnn,"url")!=null){
          215                 showStr += "<";
          216                 if(this.getAttribute(nnn,"confirm")=="true"){
          217                   showStr +="href=\"javaScript:;\" onClick=\"XMLDATA.instance["+this.handle+"].confirm('"+this.getAttribute(nnn,"url")+"',XMLDATA.literals["+this.getAttribute(nnn,"literal")+"],"+this.handle+");\"";
          218                 }else if(this.getAttribute(nnn,"onclick")=="true"){
          219                   showStr +="href=\"javaScript:;\" onClick=\""+this.getAttribute(nnn,"url")+"\"";
          220                 }else{
          221                   showStr +="href=\""+this.getAttribute(nnn,"url")+"\" target='"+(this.getAttribute(nnn,"open")=="1"?"_blank'":"'");
          222                 }
          223                 showStr += "class=\""+this.options.aClass+"\">";
          224                 showStr += this.getNodeValue(nnn);
          225                 showStr += "</a>";
          226               }else{showStr += this.getNodeValue(nnn);}
          227               showStr += '</td>';
          228             }
          229           showStr += '</tr>';
          230           if(hiddiv){showStr += '<tr style=\"display:none"><td colspan=\"20\"'+(nodeId==''?'':' id=\"'+nodeId+'\"')+'>正在加載數據</td></tr>';};
          231           i++;
          232       }
          233       if(showStr == '<table width="100%" border="0" cellspacing="0" cellpadding="0">')
          234       {this.showMsg("沒有找到任何數據!");if(this.page>1)this.list(this.page-1);}
          235       else
          236       {showStr += this.options.tbFoot+'</table>';this.showMsg(showStr);}
          237 },
          238 displayNext : function (flag){
          239       if(flag)
          240       {
          241           if(this.options.showPages){
          242            this.$(this.options.next).style.display =  "";
          243            this.$(this.options.next2).style.display =  "";
          244           }
          245        }else
          246       {
          247           if(this.options.showPages){
          248           this.$(this.options.next).style.display =  "none";
          249            this.$(this.options.next2).style.display =  "none";
          250            }    
          251        }
          252 },
          253 displayPre : function (flag){
          254       if(flag)
          255       {if(this.options.showPages){this.$(this.options.pre).style.display =  "";
          256        this.$(this.options.pre2).style.display =  "";}}
          257       else
          258       {if(this.options.showPages){this.$(this.options.pre).style.display =  "none";
          259        this.$(this.options.pre2).style.display =  "none";}}
          260 },
          261 confirm : function (url,literal,hInstance){
          262       if(!confirm(literal)) return false;
          263       XMLDATA.instance[hInstance].execute(url);
          264 }
          265 }

          posted on 2007-04-30 18:34 鹽巴 閱讀(582) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 德保县| 兰州市| 鄂伦春自治旗| 磐石市| 芜湖市| 铜山县| 衡山县| 隆安县| 阆中市| 浏阳市| 界首市| 安新县| 武山县| 府谷县| 沅陵县| 新民市| 赤壁市| 吉安县| 九台市| 彩票| 闵行区| 印江| 新建县| 莫力| 乌拉特前旗| 方山县| 蓬溪县| 无极县| 绥芬河市| 阿瓦提县| 盘山县| 宁乡县| 平顶山市| 遂宁市| 伊川县| 绥棱县| 山阴县| 昌平区| 平山县| 昭通市| 剑阁县|