我運用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));這一行。
請各位先進幫我看一下語法是哪裡有錯,謝謝!! |