呵呵, 支持....
俺也写了一个库类, 几乎可以管理所有JS代码...
让你参考参考...
/* <script> */var Im = new Importer();
Im.Go(fInitImporter);
function fInitImporter(Param)
{
Param.Path = "/SqCsJsLib/";
Param.Ext = ".js";
Param.HFolder = "Help";
Param.HExt = ".txt";
Param.HIntervalMs = 50;
}// shawl.qiu JavaScript Document
/*-----------------------------------------------------------------------------------*\
* shawl.qiu Javascript Importer class v1.0
\*-----------------------------------------------------------------------------------*/
//---------------------------------begin class Importer()-------------------------------//
function Importer()
{// shawl.qiu code
//------------------------------------begin private variable
//---------------begin about
var Au = {};
Au.Subject = "shawl.qiu Javascript Importer class";
Au.Version = "v1.0";
Au.Name = "shawl.qiu";
Au.Email = "[email protected]";
Au.Blog = "http://blog.csdn.net/btbtd/";
Au.CreatedDate = "2007-9-13 v1.0";
Au.Update = {};
Au.Update["1"] = "";
//---------------end about
var This = this;
var Param = {};
Param.Path = "/SqCsJsLib/";
Param.Ext = ".js";
Param.HFolder = "Help";
Param.HExt = ".txt";
Param.HIntervalMs = 50;
var PVar = {};
PVar.Interval = null;
PVar.Count = 0;
//------------------------------------end private variable
//------------------------------------begin public method
//-------------------Begin this.Get
this.Get = {};
this.Get.Au = fGetAu;
//-------------------End this.Get
//-------------------Begin this.Set
this.Set = {};
//-------------------End this.Set
this.Go = fGo;
this.Include = fInclude;
this.IncludeDirector = fIncludeDirector;
this.Help = fHelp;
//------------------------------------end public method //------------------------------------begin private method
function fGo(fIniter)
{ // shawl.qiu code, void return
if(fIsFunc(fIniter)) fIniter(Param);
} // end function fGo
function fIncludeDirector(sCmdList, bIncludeOnce)
{ // shawl.qiu code, void return
var CmdAr = sCmdList.split("|");
var CmdArLen = CmdAr.length;
var iCmdArCount = 0;
while(iCmdArCount<CmdArLen)
{
var sFilePath = CmdAr[iCmdArCount];
var sClass = sFilePath.replace(/^.*\//g, "").replace(/\..*$/g, "");
var bIncluded = false;
if(bIncludeOnce)
{
bIncluded = fIsFunc(window[sClass]);
//document.write("bIncluded: ", bIncluded, "<br/>");
if(bIncluded)
{
iCmdArCount++;
continue;
}
} // end if
var sInclude = ["<script type='text/javascript' src='",sFilePath,"'><\/script>"].join('');
document.write(sInclude);
//defaultStatus = sFilePath;
iCmdArCount++;
} // end while
} // end function fIncludeDirector(sCmdList, bIncludeOnce)
function fInclude(sCmdList, bIncludeOnce)
{ // shawl.qiu code, return array
var CmdAr = sCmdList.split("|");
var CmdArLen = CmdAr.length;
var iCmdArCount = 0;
var PathAr = [];
while(iCmdArCount<CmdArLen)
{
var sCmd = CmdAr[iCmdArCount];
var sPath = sCmd.replace(/\./g, "/");
var sClass = sCmd.replace(/^.*\./g, "").replace(/[\d\_\-]+$/, "");
var sFilePath = [Param.Path, sPath, "/", sClass, Param.Ext].join("");
var sFolderPath = [Param.Path, sPath, "/"].join("");
PathAr.push(sFolderPath);
var bIncluded = false;
if(bIncludeOnce)
{
bIncluded = fIsFunc(window[sClass]);
//document.write("bIncluded: ", bIncluded, "<br/>");
if(bIncluded)
{
iCmdArCount++;
continue;
}
} // end if
// document.write("sCmd: ", sCmd, "<br/>");
// document.write("sPath: ", sPath, "<br/>");
// document.write("sClass: ", sClass, "<br/>");
// document.write("sFilePath: ", sFilePath, "<br/>");
var sInclude = ["<script type='text/javascript' src='",sFilePath,"'><\/script>"].join('');
document.write(sInclude);
iCmdArCount++;
} // end while
return PathAr;
} // end function fInclude(sCmdList, bIncludeOnce)
function fHelp(sCmdList, bHighlight)
{ // shawl.qiu code, void return
var CmdAr = sCmdList.split("|");
var CmdArLen = CmdAr.length;
var iCmdArCount = 0;
if(bHighlight)
{
fInclude("String.HighlightEngine", true);
PVar.Interval =
setInterval
(
function()
{
defaultStatus = "Loading..."+(PVar.Count++);
if(window["HighlightEngine"])
{
while(iCmdArCount<CmdArLen)
{
var sFilePath = fSetHelpPath(CmdAr[iCmdArCount]).join("");
fXhExt(sFilePath, fHelpCallback, [bHighlight]);
iCmdArCount++;
clearInterval(PVar.Interval);
} // end while
defaultStatus = "Done.";
PVar.Count = 0;
}
}
,
Param.HIntervalMs
);
}
else
{
while(iCmdArCount<CmdArLen)
{
var sFilePath = fSetHelpPath(CmdAr[iCmdArCount]).join("");
fXhExt(sFilePath, fHelpCallback, [bHighlight]);
iCmdArCount++;
} // end while
} // end if
} // end function fHelp(sCmdList, bHighlight)
function fSetHelpPath(sCmd)
{ // shawl.qiu code, return array
var sPath = sCmd.replace(/\./g, "/");
var sClass = sCmd.replace(/^.*\./g, "").replace(/[\d\_\-]+$/, "");
if(/^Readme$/i.test(sCmd))
{
return [Param.Path, "Readme", Param.HExt];
}
else if(/^Call$/i.test(sCmd))
{
return [Param.Path, "Default", Param.HExt];
}
else if(/^Source$/i.test(sCmd))
{
return [Param.Path, "default", Param.Ext];
}
else
{
//alert([Param.Path, sPath, "/", Param.HFolder, "/", sClass, Param.HExt])
return [Param.Path, sPath, "/", Param.HFolder, "/", sClass, Param.HExt];
}
} // end function fSetHelpPath(sCmd)
function fHelpCallback(TextAr, bHighlight)
{ // shalw.qiu code, void return;
//alert(TextAr)
var Body = document.body;
var SpanEle = $("Span");
if(bHighlight)
{
var Hl = new HighlightEngine();
Hl.Go(TextAr, "Tag");
delete Hl;
TextAr.push("<hr/>");
SpanEle.innerHTML = TextAr.join("");
}
else
{
SpanEle.innerHTML = ["<xmp>", TextAr, "<\/xmp><hr/>"].join("");
}
if(Body.childNodes.length===0)
{
alert(0)
}
else
{
Body.insertBefore(SpanEle, Body.firstChild)
}
} // end function fHelpCallback(TextAr)
function fIsFunc(Func)
{ // shawl.qiu code, return Boolean
if(Func) if(Func.constructor==Function) return true;
return false;
} // end function fIsFunc(Func)
function fXhExt(sUrl, oFunc, ExtArgAr, sMethod)
{//shawl.qiu code, void return
if(!sMethod) sMethod = "GET";
var xh;
try{ xh = new XMLHttpRequest();}
catch(e)
{
try{ xh = new ActiveXObject('microsoft.xmlhttp');}
catch(e)
{
try{ xh = new ActiveXObject("Msxml2.XMLHTTP");} catch(e){} // end try 2
} // end try 1
} // end try
xh.open(sMethod, sUrl);
xh.onreadystatechange =
function()
{
if(xh.readyState == 4 && xh.status == 200)
{
if(oFunc)
{
if(ExtArgAr)
{
if(ExtArgAr.constructor==Array)
{
ExtArgAr.unshift([xh.responseText]);
oFunc.apply(null, ExtArgAr);
}
else oFunc([xh.responseText]);
}
else oFunc([xh.responseText]);
}
else alert(xh.responseText);
}
};
xh.send(null);
} // end function fXhExt(sUrl, oFunc, ExtArgAr, sMethod) function $(sTag){return document.createElement(sTag);}
function _(sText){return document.createTextNode(sText);}
function fGetAu(){ return Au; }
//------------------------------------end private method
} // shawl.qiu code
//---------------------------------end class Importer()---------------------------------//
/*</script> */
俺也写了一个库类, 几乎可以管理所有JS代码...
让你参考参考...
/* <script> */var Im = new Importer();
Im.Go(fInitImporter);
function fInitImporter(Param)
{
Param.Path = "/SqCsJsLib/";
Param.Ext = ".js";
Param.HFolder = "Help";
Param.HExt = ".txt";
Param.HIntervalMs = 50;
}// shawl.qiu JavaScript Document
/*-----------------------------------------------------------------------------------*\
* shawl.qiu Javascript Importer class v1.0
\*-----------------------------------------------------------------------------------*/
//---------------------------------begin class Importer()-------------------------------//
function Importer()
{// shawl.qiu code
//------------------------------------begin private variable
//---------------begin about
var Au = {};
Au.Subject = "shawl.qiu Javascript Importer class";
Au.Version = "v1.0";
Au.Name = "shawl.qiu";
Au.Email = "[email protected]";
Au.Blog = "http://blog.csdn.net/btbtd/";
Au.CreatedDate = "2007-9-13 v1.0";
Au.Update = {};
Au.Update["1"] = "";
//---------------end about
var This = this;
var Param = {};
Param.Path = "/SqCsJsLib/";
Param.Ext = ".js";
Param.HFolder = "Help";
Param.HExt = ".txt";
Param.HIntervalMs = 50;
var PVar = {};
PVar.Interval = null;
PVar.Count = 0;
//------------------------------------end private variable
//------------------------------------begin public method
//-------------------Begin this.Get
this.Get = {};
this.Get.Au = fGetAu;
//-------------------End this.Get
//-------------------Begin this.Set
this.Set = {};
//-------------------End this.Set
this.Go = fGo;
this.Include = fInclude;
this.IncludeDirector = fIncludeDirector;
this.Help = fHelp;
//------------------------------------end public method //------------------------------------begin private method
function fGo(fIniter)
{ // shawl.qiu code, void return
if(fIsFunc(fIniter)) fIniter(Param);
} // end function fGo
function fIncludeDirector(sCmdList, bIncludeOnce)
{ // shawl.qiu code, void return
var CmdAr = sCmdList.split("|");
var CmdArLen = CmdAr.length;
var iCmdArCount = 0;
while(iCmdArCount<CmdArLen)
{
var sFilePath = CmdAr[iCmdArCount];
var sClass = sFilePath.replace(/^.*\//g, "").replace(/\..*$/g, "");
var bIncluded = false;
if(bIncludeOnce)
{
bIncluded = fIsFunc(window[sClass]);
//document.write("bIncluded: ", bIncluded, "<br/>");
if(bIncluded)
{
iCmdArCount++;
continue;
}
} // end if
var sInclude = ["<script type='text/javascript' src='",sFilePath,"'><\/script>"].join('');
document.write(sInclude);
//defaultStatus = sFilePath;
iCmdArCount++;
} // end while
} // end function fIncludeDirector(sCmdList, bIncludeOnce)
function fInclude(sCmdList, bIncludeOnce)
{ // shawl.qiu code, return array
var CmdAr = sCmdList.split("|");
var CmdArLen = CmdAr.length;
var iCmdArCount = 0;
var PathAr = [];
while(iCmdArCount<CmdArLen)
{
var sCmd = CmdAr[iCmdArCount];
var sPath = sCmd.replace(/\./g, "/");
var sClass = sCmd.replace(/^.*\./g, "").replace(/[\d\_\-]+$/, "");
var sFilePath = [Param.Path, sPath, "/", sClass, Param.Ext].join("");
var sFolderPath = [Param.Path, sPath, "/"].join("");
PathAr.push(sFolderPath);
var bIncluded = false;
if(bIncludeOnce)
{
bIncluded = fIsFunc(window[sClass]);
//document.write("bIncluded: ", bIncluded, "<br/>");
if(bIncluded)
{
iCmdArCount++;
continue;
}
} // end if
// document.write("sCmd: ", sCmd, "<br/>");
// document.write("sPath: ", sPath, "<br/>");
// document.write("sClass: ", sClass, "<br/>");
// document.write("sFilePath: ", sFilePath, "<br/>");
var sInclude = ["<script type='text/javascript' src='",sFilePath,"'><\/script>"].join('');
document.write(sInclude);
iCmdArCount++;
} // end while
return PathAr;
} // end function fInclude(sCmdList, bIncludeOnce)
function fHelp(sCmdList, bHighlight)
{ // shawl.qiu code, void return
var CmdAr = sCmdList.split("|");
var CmdArLen = CmdAr.length;
var iCmdArCount = 0;
if(bHighlight)
{
fInclude("String.HighlightEngine", true);
PVar.Interval =
setInterval
(
function()
{
defaultStatus = "Loading..."+(PVar.Count++);
if(window["HighlightEngine"])
{
while(iCmdArCount<CmdArLen)
{
var sFilePath = fSetHelpPath(CmdAr[iCmdArCount]).join("");
fXhExt(sFilePath, fHelpCallback, [bHighlight]);
iCmdArCount++;
clearInterval(PVar.Interval);
} // end while
defaultStatus = "Done.";
PVar.Count = 0;
}
}
,
Param.HIntervalMs
);
}
else
{
while(iCmdArCount<CmdArLen)
{
var sFilePath = fSetHelpPath(CmdAr[iCmdArCount]).join("");
fXhExt(sFilePath, fHelpCallback, [bHighlight]);
iCmdArCount++;
} // end while
} // end if
} // end function fHelp(sCmdList, bHighlight)
function fSetHelpPath(sCmd)
{ // shawl.qiu code, return array
var sPath = sCmd.replace(/\./g, "/");
var sClass = sCmd.replace(/^.*\./g, "").replace(/[\d\_\-]+$/, "");
if(/^Readme$/i.test(sCmd))
{
return [Param.Path, "Readme", Param.HExt];
}
else if(/^Call$/i.test(sCmd))
{
return [Param.Path, "Default", Param.HExt];
}
else if(/^Source$/i.test(sCmd))
{
return [Param.Path, "default", Param.Ext];
}
else
{
//alert([Param.Path, sPath, "/", Param.HFolder, "/", sClass, Param.HExt])
return [Param.Path, sPath, "/", Param.HFolder, "/", sClass, Param.HExt];
}
} // end function fSetHelpPath(sCmd)
function fHelpCallback(TextAr, bHighlight)
{ // shalw.qiu code, void return;
//alert(TextAr)
var Body = document.body;
var SpanEle = $("Span");
if(bHighlight)
{
var Hl = new HighlightEngine();
Hl.Go(TextAr, "Tag");
delete Hl;
TextAr.push("<hr/>");
SpanEle.innerHTML = TextAr.join("");
}
else
{
SpanEle.innerHTML = ["<xmp>", TextAr, "<\/xmp><hr/>"].join("");
}
if(Body.childNodes.length===0)
{
alert(0)
}
else
{
Body.insertBefore(SpanEle, Body.firstChild)
}
} // end function fHelpCallback(TextAr)
function fIsFunc(Func)
{ // shawl.qiu code, return Boolean
if(Func) if(Func.constructor==Function) return true;
return false;
} // end function fIsFunc(Func)
function fXhExt(sUrl, oFunc, ExtArgAr, sMethod)
{//shawl.qiu code, void return
if(!sMethod) sMethod = "GET";
var xh;
try{ xh = new XMLHttpRequest();}
catch(e)
{
try{ xh = new ActiveXObject('microsoft.xmlhttp');}
catch(e)
{
try{ xh = new ActiveXObject("Msxml2.XMLHTTP");} catch(e){} // end try 2
} // end try 1
} // end try
xh.open(sMethod, sUrl);
xh.onreadystatechange =
function()
{
if(xh.readyState == 4 && xh.status == 200)
{
if(oFunc)
{
if(ExtArgAr)
{
if(ExtArgAr.constructor==Array)
{
ExtArgAr.unshift([xh.responseText]);
oFunc.apply(null, ExtArgAr);
}
else oFunc([xh.responseText]);
}
else oFunc([xh.responseText]);
}
else alert(xh.responseText);
}
};
xh.send(null);
} // end function fXhExt(sUrl, oFunc, ExtArgAr, sMethod) function $(sTag){return document.createElement(sTag);}
function _(sText){return document.createTextNode(sText);}
function fGetAu(){ return Au; }
//------------------------------------end private method
} // shawl.qiu code
//---------------------------------end class Importer()---------------------------------//
/*</script> */
觉得好像绕了一个轨道,当初看的是prototype。看了很长时间。
后来觉得面对对象很好,学学写写很长时间。也绕弯了!
其实js的function就是最好的这个脚本语言最好的面对对象O.o
看了mootools写了Ajax的对像,当初觉得很了不起的感觉。
……
看了Effect C++,认为程序再通用和效率的兼顾下更应该偏向效率!
脚本语言本身应该是被注入了,程序员的精髓的。
你的封装,可能提高效率或者应用,但毕竟是少数,应为你很难了解内部的实现。
后来觉得写写一些简单的函数才是王道!
国人都有人研究prototype,jquery,mootools等的。
我觉得很好,可以借鉴思想!但是认为应用方面的话,这些js封装的太多太大。
当然包括我自己写的这个Oo函数库。
希望的话,你可以看懂我写的函数,然后该用到某个函数的时候复制粘贴上去就可以。
至于这些函数,毕竟只凭个人的能力,肯定存在很多不足的地方。
很希望大家可以提出来,共同进步!!!
这些是我学js得到的一些心得吧O.o
希望大家多多交流!谢谢[email protected]
O.o
JF。。
JF
//get方法 获取href后面的属性 参数[val:属性名];
Function.get = function(val) {
var uri = window.location.search;
var re = new RegExp(val + '=([^&]*)');
return re.test(uri) ? uri.match(re)[1] : null;
};
//prototype的类扩展或重写 有时的确觉得满好用 参数[O:源对象|o:扩展对象]
Function.extend = function(O, o) {
for(var p in o) O[p] = o[p]; return O;
};
//绑定2个语句柄 我到没怎么用这个 参数[fn:绑定的语句柄|O:语句柄中的this对象|arg:参数]
Function.bind = function(fn, O, args) {
return function() {return fn.apply(O, args || arguments)};
};
//遍历执行... 不建议用这个IE下清除内存很麻烦 为什么直接绑定到Array对象上
Function.forEach = function(O, fn, o, args) {
if(O.length == undefined)
for(var i in O) fn.apply( o||O, args || [O[i], i] );
else
for(var i=0; i< O.length; i++) fn.apply( o||O, args || [O[i], i] );
return O;
};
//Ajax对象 参数[O:应该是一个对象,用于补充或扩展当前实例,估计是用来存放一系列事件的语句柄的]
function Ajax(O) {
//不说了
this.transport = (window.ActiveXObject) ? new ActiveXObject('Microsoft.XMLHTTP') : (window.XMLHttpRequest ? new XMLHttpRequest() : false);
//基础属性
this.options = Function.extend({
method: 'get',
uri: '',
async: true,
postBody: null,
onComplete: function() {},
onStateChange: function() {},
update: null,
evalScripts: false
}, O || {});
//发送命令的方法 参数[o:和上面的O是一类东西]
this.request = function(o) {
Function.extend(this.options, o || {});
//打开连接
this.transport.open(this.options.method, this.options.uri, this.options.async);
//绑定事件
this.transport.onreadystatechange = Function.bind(this.onStateChange, this);
//设定post模式的请求头
if(this.options.method == 'post') {
this.transport.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
if (this.transport.overrideMimeType) this.transport.setRequestHeader('Connection', 'close');
this.options.postBody = Ajax.toQueryString(this.options.postBody);
}
//发送
this.transport.send(this.options.postBody);
};
//异步接收事件
this.onStateChange = function() {
//为什么用settimeout?
//可能是用来绑定某个语句柄
setTimeout(Function.bind(this.options.onStateChange, this), 10);
//检查 数据是否接收完毕并且无错 好像漏了status==0的状态
if (this.transport.readyState == 4 && this.transport.status == 200) {
//下面这个是直接输出反馈内容的 比如返回'更新成功!'
if (this.options.update) document.getElementById(this.options.update).innerHTML = this.transport.responseText;
//好像是绑定个事件
setTimeout(Function.bind(this.options.onComplete, this, [this.transport.responseText, this.transport.responseXML]), 20);
if (this.options.evalScripts)
setTimeout(Function.bind(this.evalScripts, this), 30);
//清空事件语句柄 为什么不直接用null 而用个new Function
this.transport.onreadystatechange = function() {};
}
};
//这个还有点用
this.evalScripts = function() {
var scripts = null;
if(scripts = this.transport.responseText.match(/<script[^>]*?>[\S\s]*?<\/script>/g)) {
Function.forEach(scripts, function(script){
eval(script.replace(/^<script[^>]*?>/, '').replace(/<\/script>$/, ''));
});
}
};
};
//将Object 转换为 search字符串链 参数[o:输入的Object]
Ajax.toQueryString = function(o) {
if(typeof o == 'string') return o;
else if(typeof o == 'object') {
var queryString = [];
for(var p in o) queryString.push(encodeURIComponent(p)+'='+encodeURIComponent(o[p]));
return queryString.join('&');
}
else return false;
};
//获取表单元素值 参数[el:HTML的表单元素]
Ajax.getElementValue = function(el) {
var value = false;
switch(el.tagName.toLowerCase()) {
//奇怪 为什么不用select.value 或者select.options[index].value 可能是非IE FF的浏览器兼容吧
case 'select': value = el.getElementsByTagName('option')[el.selectedIndex].value; break;
//checked的(多选checkbox|单选radio) 和 (按钮button|隐藏框hidden|文本框text|密码框password) 还应该有image file reset submit
case 'input': if ( (el.checked && /checkbox|radio/.test(el.type)) || (/button|hidden|text|password/.test(el.type)) )
value = el.value; break;
//textarea
case 'textarea': value = el.value;
}
return value;
};
//获取表单内的全部表单元素 参数[fm:HTML的表单]
Ajax.getFormObject = function(fm) {
var o = {};
//为什么 用 * 而不分开用 select textarea input 难道顺序不能乱? 用*很浪费
Function.forEach(fm.getElementsByTagName('*'), function(el) {
var name = el.name;
var value = Ajax.getElementValue(el);
if(value && name) o[name] = value;
});
return o;
};
//以上3个方法放到一起就是将指定的表单内的所有表单元素 转换成 search字符串的形式 还是满有用的//XMLDOM对象类
function DOMDocument() {
//初始化
this.hasXml = false;
this.xmlDoc = DOMDocument.createXMLDocument();
this.xmlDoc.async = false;
this.xslDoc = DOMDocument.createXSLDocument();
this.xslDoc.async = false; //加载一个xml文件 参数[aXml:路径]
this.load = function(aXml) {
this.xmlDoc.load(aXml);
this.hasXml = true;
};
//.....这个不说了 我也很少用
this.loadXSL = function(aXsl) {
this.xslDoc.load(aXsl);
if(window.ActiveXObject) {
var oTemplate = new ActiveXObject('MSXML2.XSLTemplate');
oTemplate.stylesheet = this.xslDoc;
this.xsltProcessor = oTemplate.createProcessor();
} else {
this.xsltProcessor = new XSLTProcessor();
this.xsltProcessor.importStylesheet(this.xslDoc);
}
};
//直接加载XML文档
this.loadXML = function(aStr) {
if(window.ActiveXObject) this.xmlDoc.loadXML(aStr);
else {
var parser = new DOMParser();
this.xmlDoc = parser.parseFromString(aStr, 'text/xml');
}
this.hasXml = true;
};
//Xpath分析器 ....这个有点兼容性问题
this.evaluateXPath = function(aExpr, aNode) {
aNode = aNode||this.xmlDoc;
if(window.ActiveXObject)
return aNode.selectNodes(aExpr);
else {
var xpe = new XPathEvaluator();
var nsResolver = xpe.createNSResolver(aNode.ownerDocument == null ?
aNode.documentElement : aNode.ownerDocument.documentElement);
var result = xpe.evaluate(aExpr, aNode, nsResolver, 0, null);
var found = [];
var res;
while (res = result.iterateNext())
found.push(res);//push效率没有arr[arr.length]=xxx的效率高
return found;
}
};
//pass
this.transform = function(aParams) {
if(window.ActiveXObject) {
for(var p in aParams) this.xsltProcessor.addParameter(p, aParams[p]);
this.xsltProcessor.input = this.xmlDoc;
this.xsltProcessor.transform();
return this.xsltProcessor.output;
} else {
for(var p in aParams) this.xsltProcessor.setParameter(null, p, aParams[p]);
var oResultDom = this.xsltProcessor.transformToDocument(this.xmlDoc);
return new XMLSerializer().serializeToString(oResultDom);
}
};
};
//创建xmldoc对象
DOMDocument.createXMLDocument = function() {
if (window.ActiveXObject) return new ActiveXObject('MSXML2.DOMDocument');
else return document.implementation.createDocument('','',null);
};
//创建xsl对象
DOMDocument.createXSLDocument = function() {
if (window.ActiveXObject) return new ActiveXObject('Microsoft.FreeThreadedXMLDOM');
else return document.implementation.createDocument('','',null);
};
原来,还有好多问题我没有发现的O.o
真的很是感谢!!!另外 加注释的事情 自己先写了一部分在博客上,以后慢慢添加上!
很希望有这方面的朋友帮我写些注释
发我邮箱上[email protected]
如果同意我可以把它贴在博客上 供大家一起学习 可能的话 下次把注释写入js中
谢谢写的一些小小的注释在这里!http://www.hua2r.com/blog/fd0fccd486e002fb3dfc200e0ea957a3.html
大家提提意见吧
//xmlhttp对象
function xmlHttp()
{
this.classType = "xmlHttp"; //类型 (规范) 用于指定为强制类型时使用
this.bubbles = false;//事件冒泡 (规范)
Class.initialize.apply(this,arguments); //初始化 (规范)
}
xmlHttp.prototype = {
//初始化 (规范)
initialize:function(){
this.postType = "POST";
this.url = "";
this.async = false;
this.responseType = 0;//反馈类型 0:xml 1:text 2:stream
//创建xmlHttpRequest
if(this.xhttp=this.createXHttp())
this.initEvent();
},
//中断方法
about:function(){this.xhttp.about();},
//加载事件
initEvent:function()
{
var self = this;
//状态变更事件语句柄
this.xhttp.onreadystatechange = function()
{
switch(self.xhttp.readyState)
{
//完成
case 4:
if(self.xhttp.status==200 || self.xhttp.status==0)
self.fireEvent("onready");
else
self.fireEvent("onerror",self.xhttp.status);
break;
//打开
case 1:self.fireEvent("onopen");break;
//发送
case 2:self.fireEvent("onsended");break;
//加载中
case 3:self.fireEvent("onloading");break;
}
}
},
//接收反馈信息 参数[type:返回类型 0:xml/1:string/2:stream(IE) ]
response:function(type)
{
if(type==null)type=this.responseType;
switch(type)
{
case "stream":
case 2:
if(Browser.IE)return this.xhttp.responseStream;
default:
case "xml":
case 0:
return this.xhttp.responseXML;
case "text":
case 1:
return this.xhttp.responseText;
}
},
//发送信息包 参数[command:信息包]
sendCommand:function(command)
{
if(this.xhttp!=null && command!=null)
{
//打开xmlHttpRequest对象
this.xhttp.open(this.postType,this.url,this.async==true);
//创建post请求头 后者的编码要根据实际情况定
if(this.postType.toLowerCase()=="post")
this.xhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
else
this.xhttp.setRequestHeader("Content-Type","text/xml; charset=utf-8");
//发送信息包
this.xhttp.send(command);
//如果是非异步模式 直接返回回馈信息 不用额外添加事件语句柄
if(this.async==false && (this.xhttp.status==200 || this.xhttp.status==0))
return this.response();
}
return "";
},
//创建无法创建XmlHttpRequest方法
createXHttp:function()
{
var o = null;
if(Browser.IE){
var arr = ["MSXML3.XMLHTTP","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
for(var i=0,l=arr.length;i<l;i++)
try{o=new ActiveXObject(arr[i]);break;}catch(e){}
}
else if(Browser.FF)
try{o=new XMLHttpRequest();}catch(e){}
if(o==null)
alert("无法创建XmlHttpRequest");
return o;
}
}//------------------------------------ 事件部分
//类的规范方法
var Class = {
//规范的初始化方法
initialize:function()
{
this.fireEvent = Class.fireEvent;
this.attachEvent = this.addEventListener = Class.attachEvent;
this.detachEvent = this.removeEventListener = Class.detachEvent;
this.initialize.apply(this,arguments);
},
//触发事件的方法 参数[e:事件名;p:参数(允许向事件语句柄传递参数)]
//为了兼容IE和FF原有的事件 这里的事件名 需要带'on'
fireEvent:function(e,p)
{
if(typeof(e)=="string")
{
//判断对象是否存在语句柄 有则执行
if(typeof(this[e])=="function")this[e](p);
//判断对象是否有绑定语句柄队列 如果有 遍历执行
if(this.Events && this.Events[e] && this.Events[e] instanceof Array)
for(var i=0,l=this.Events[e].length;i<l;i++)
if(typeof(this.Events[e][i])=="function")
this.Events[e][i](p);
//判断对象是否可以冒泡 && 判断父对象是否支持fireEvent方法 有则触发父对象事件
if(this.bubbles!=false && this.parent && typeof(this.parent.fireEvent)=="function")
this.parent.fireEvent(e,p);
}
},
//兼容IE和FF的 向事件语句柄队列中添加一个语句柄 参数[_eventKey:事件名;_handler:语句柄]
attachEvent:function(_eventKey,_handler)
{
if(typeof(_eventKey)=="string" && typeof(_handler)=="function")
{
if(Browser.FF)_eventKey = "on" + _eventKey;
if(this.Events==null)this.Events={};
if(this.Events[_eventKey]==null)this.Events[_eventKey]=[];
this.Events[_eventKey][this.Events[_eventKey].length]=_handler;
}
},
//兼容IE和FF的 移除一个事件语句柄 参数[_eventKey:事件名;_handler:语句柄]
detachEvent:function(_eventKey,_handler)
{
if(typeof(_eventKey)=="string" && typeof(_handler)=="function")
{
if(Browser.FF)_eventKey = "on" + _eventKey;
if(this.Events && this.Events[_eventKey])
{
if(this.Events[_eventKey] instanceof Array)
{
this.Events[_eventKey].Remove(_handler);
if(this.Events[_eventKey].length==0)delete this.Events[_eventKey];
}
else
delete this.Events[_eventKey];
}
}
}
}//----------------------------------辅助方法
//浏览器类型
var Browser = {
MO:(typeof(document.implementation)!="undefined"&&typeof(document.implementation.createDocument)!="undefined"&&typeof(HTMLDocument)!="undefined")
,IE:window.ActiveXObject?true:false
,FF:(navigator.userAgent.toLowerCase().indexOf("firefox")>-1)
,OP:(navigator.userAgent.toLowerCase().indexOf("opera")>-1)
}
//添加和移除事件语句柄方法 兼容IE/FF 参数[o:事件对象;_eventKey:对象名;_handler:语句柄]
function $AE(o,_eventKey,_handler)
{
if(Browser.IE)
{o.attachEvent("on" + _eventKey,_handler);}
else if(Browser.FF)
{o.addEventListener(_eventKey,_handler,false);}
}
function $DE(o,_eventKey,_handler)
{
if(Browser.IE)
o.detachEvent("on" + _eventKey,_handler);
else if(Browser.FF)
o.removeEventListener(_eventKey,_handler,false);
}