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 盐巴 阅读(574) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: