返回列表 發帖

使用jquery製作物件

我運用jquery製作成一個物件,設計成FHXML.js,程式碼如下
function JXML(){        
        var Sys = {};
        var ua = navigator.userAgent.toLowerCase();
        var s;
        (s = ua.match(/rv[\d.]+)\) like gecko/)) ? Sys.ie = s[1] :
        (s = ua.match(/msie ([\d.]+)/)) ? Sys.ie = s[1] :
        (s = ua.match(/firefox\/([\d.]+)/)) ? Sys.firefox = s[1] :
        (s = ua.match(/chrome\/([\d.]+)/)) ? Sys.chrome = s[1] :
        (s = ua.match(/opera.([\d.]+)/)) ? Sys.opera = s[1] :
        (s = ua.match(/version\/([\d.]+).*safari/)) ? Sys.safari = s[1] : 0;
        var fg = false;        
        if (Sys.ie)        fg=true;
        this.fg=fg;//判斷user使用的瀏覽器
        var XMLDoc=null;
        this.XMLDoc = $($.parseXML("<FHXML></FHXML>"));
                
        // Methods
        this.loadXML = loadXML;
        this.getXML = getXML;
        this.setValue = setValue;
        this.getValue = getValue;
        this.setNode = setNode;
        this.getSize = getSize;
        this.getString = getString;        
}

/*
mthod name:loadXML
@param:strXML(傳入的XML字串)
return:無
*/
function loadXML(strXML){
        this.XMLDoc = $($.parseXML(strXML));
}

/*
mthod name:getXML
return:XML物件裡面的內容
*/
function getXML(){        
        if(this.fg){
                  return this.XMLDoc[0].xml;
          }else{
                  return (new XMLSerializer()).serializeToString(this.XMLDoc[0]);
          }
}

function getString(){        
          var str1=(new XMLSerializer()).serializeToString(this.XMLDoc);
          var bloc = str1.indexOf(">")+1;          
          var eloc = str1.lastIndexOf("<");          
          var whlXML = str1.substring(bloc,eloc);
          return whlXML;          
}


/*
mthod name:getValue
@param:strPatt(取值的XML節點字串)
return:節點的值
*/
function getValue(strPatt){        
        var strP = strPatt.replace(/\//g," ");
          strP = strP.replace("[",":eq(");
          strP = strP.replace("]",")");
          return $(this.XMLDoc).find(strP).text();  
}

/*
mthod name:setValue
@param:strPatt(設值的XML父節點字串)
@param:ndname(設值的XML節點字串)
@param:strCont(取值的XML節點值)
@param:fg(1:設在最後 2:設在最前 3:取代舊值)
return:無
*/
function setValue(strPatt,ndname,strCont,fg){
        var strP = strPatt.replace(/\//g," ");
          strP = strP.replace("[",":eq(");
          strP = strP.replace("]",")");
          var nd = "<"+ndname+">"+strCont+"</"+ndname+">";
          
          if(this.fg){
                  if(fg==1){
                          $(this.XMLDoc).find(strP).append(nd);
                  }else if(fg==2){
                          $(this.XMLDoc).find(strP).prepend(nd);
                }else{
                          $(this.XMLDoc).find(strP+" "+ndname).text(strCont);
                  }
          }else{
                  if(fg==1){
                          $(this.XMLDoc).find(strP).append($(nd,this.XMLDoc));
                  }else if(fg==2){
                          $(this.XMLDoc).find(strP).prepend($(nd,this.XMLDoc));
                }else{
                          $(this.XMLDoc).find(strP+" "+ndname).text(strCont);
                  }
          }
}

/*
mthod name:setPath
@param:strPatt(XML父節點字串)
@param:ndname(XML節點字串)
return:無(只加在最後面)
*/
function setNode(strPatt,ndname){
          var strP = strPatt.replace(/\//g," ");
          strP = strP.replace("[",":eq(");
          strP = strP.replace("]",")");
          var nd = "<"+ndname+"></"+ndname+">";          
          if(this.fg){
                  $(this.XMLDoc).find(strP).append(nd,$(this.XMLDoc));
                alert("3");
        }else{
                $(this.XMLDoc).find(strP).append($(nd,this.XMLDoc));
        }        
        
}

/*
mthod name:getSize
@param:strPatt(XML父節點字串)
return:列數
*/
function getSize(strPatt){        
          var strP = strPatt.replace(/\//g," ");
          strP = strP.replace("[",":eq(");
          strP = strP.replace("]",")"); 
          return $(this.XMLDoc).find(strP).size();          
}
然後再jsp頁面裡引用,程式碼如下
<SCRIPT LANGUAGE=JavaScript>
var xml = "<FHXML><root>"+
"<row>"+
     "<col1 attr='1'>str1</col1>"+
     "<col2 attr='2'>str2</col2>"+
 "</row>"+
"<row>"+
     "<col1 attr='3'>str3</col1>"+
     "<col2 attr='4'>str4</col2>"+
 "</row>"+
"<row>"+
     "<col1 attr='5'>str5</col1>"+
     "<col2 attr='6'>str6</col2>"+
 "</row>"+
"</root></FHXML>"; 

var obj = new JXML();
obj.loadXML(xml);
alert("1--"+obj.getSize("FHXML/root/row"));//3 row
alert("2--"+obj.getValue("FHXML/root/row[2]/col1"));//str5

obj.setNode("FHXML/root","row");//增加第4個row
alert("kk--"+obj.getXML());        
</SCRIPT>
在chrome裡面都可順利alert,不過在ie11裡面只可alert 1及alert 2,程式掛在$(this.XMLDoc).find(strP).append(nd,$(this.XMLDoc));這一行。
請各位先進幫我看一下語法是哪裡有錯,謝謝!!

返回列表 回復 發帖