function IsIE()
{
if (window.ActiveXObject)
return true;
else
return false;
}
function getXml(node) {
var serializer = new XMLSerializer();
return serializer.serializeToString(node);
}
function transformNode(oxml,oxsl)
{
if (IsIE())
{
return oxml.transformNode(oxsl);
}
else
{
var xlstProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(oxsl);
return getXml(xslprocessor.transformToFragment(oxml, document));
}
}
//获取单个XML节点
function selectSingleNode(oxmldom,xpath){
if (IsIE())
{
return oxmldom.selectSingleNode(xpath);
}
else
{
var oEvaluator = new XPathEvaluator();
var oResult = oEvaluator.evaluate(xpath,oxmldom,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null);
if (oResult != null)
{
return oResult.singleNodeValue;
}
else
{
return null;
}
}
}
function selectNodes(oxmldom,xpath)
{
if (IsIE())
{
return oxmldom.selectNodes(xpath);
}
else
{
var oEvaluator = new XPathEvaluator();
var oResult = oEvaluator.evaluate(opath,oxmldom,null,XPathResult.ORDERED_NODE_TYPE,null);
var oNodes = new Array;
if (oResult != null)
{
var oElement = oResult.iterateNext();
while (oElement)
{
oNodes.push(oElement);
oElement = oResult.iterateNext();
}
}
return oNodes;
}
}
function getXMLText(oNode)
{
var sText = "";
for (var i = 0; i < oNode.childNodes.length; i++)
{
if (oNode.childNodes[i].hasChildNodes())
{
sText += getXMLText(oNode.childNodes[i]);
}
else
{
sText += oNode.childNodes[i].nodeValue;
}
}
return sText;
}
function createXMLDom()
{
if (IsIE())
{
var oXmlDom = new ActiveXObject("Msxml2.DOMDocument");
return oXmlDom;
/*var XMLVersion = ["MSXML2.Document.5.0","MSXML2.Document.4.0","MSXML2.Document.3.0",
"MSXML2.Document","Microsoft.XmlDom"];
for (var i = 0;i < XMLVersion.length;i++ )
{
try
{
var oXmlDom = new ActiveXObject(XMLVersion[i]);
return oXmlDom;
}
catch (oError)
{
// do nothing
}
}
throw new Error("Not install msxml");*/
}
else if (document.implementation && document.implementation.createDocument)
{
try
{
var oXmlDom = document.implementation.createDocument("","",null);
return oXmlDom;
}
catch (oError)
{
throw new Error("Your browser not support XMLDocument");
}
}
}
function setCookieEx(name,value,expires,path,domain,secure)
{
var _cookie = name + "=" + value;
if(expires)
{
_cookie += ";expires="+expires.toGMTString();
}
if(path)
{
_cookie += ";path=" + path;
}
if(domain)
{
_cookie += ";domain="+domain;
}
if(secure)
{
_cookie += ";secure";
}
document.cookie = _cookie;
}
function getCookieEx(name)
{
var s = "(?:; )?"+name+"=([^;]*);?";
var ex = new RegExp(s);
if (ex.test(document.cookie))
{
return RegExp["$1"];
}
else
return null;
}
function delCookieEx(name,path,domain)
{
setCookie(name,"",new Date(0),path,domain);
}
function TList(lineCount, recordCount, dataObject)
{
//分页列表基类。
//lineCount,每页数量。
//dataObject,存放数据的对象。XML数据通过xsl转换成字符串后保存在__dataObject的innerHTML属性中。
//列表标准格式如下:
//
//
// ...
//
//
// dataObject的父结点为最上层div。
// 操作行的格式必须严格满足。其父结点为最上层div。
// 如果不符合该格式,派生类必须实现__onLoading方法。
//分页的算法
//一、条件
// A、边缘页数 > 保留页数
//二、初始化页
//如果总页数小于或者等于2*保留页数 + 中间页数,则显示所有页数
//否则,页面初始化为:[1 ,边缘页数]...[总页数 - 保留页数 + 1, 总页数]。如:1 2 3 4。。15 16
//
//三、中间变量
//转换点1 = 保留页数 + 取整((中间页数 + 1) / 2) + 1
//转换点2 = 总页数 - 保留页数 - 取整(中间页数 / 2) - 1
//
//四、页码点击
// A、如果总页数小于或者等于2*保留页数 + 中间页数,始终显示所有页数
// B、点击页数<=保留页数
// 页面为:[1, 边缘页数]...[总页数 - 保留页数 + 1, 总页数]
// C、保留页数<点击页数<转换点1
// 页面为:[1, 边缘页数 + 点击页数 - 保留页数]...[总页数 - 保留页数 + 1, 总页数]
// D、转换点1<=点击页数<=转换点2
// 页面为:[1, 保留页数]...[点击页数 - 取整((中间页数 - 1) / 2), 点击页数 + 取整(中间页数 / 2)]...[总页数 - 保留页数 + 1, 总页数]
// E、转换点2<点击页数<总页数 - 保留页数 + 1
// 页面为:[1, 保留页数]...[点击页数 + 保留页数 - 边缘页数, 总页数]
// F、点击页数>=总页数 - 保留页数 + 1
// 页面为:[1, 保留页数]...[总页数 - 边缘页数 + 1, 总页数]
//开发技巧。在实例方法中使用me代替this,以避免this在使用过程中发生作用域的变迁。
var me = this;
//操作区域
me.__funcObject = null;
//首尾保留页数
me.__remainPageCount = 2;
//中间的页数
me.__middlePageCount = 7;
//最边缘一屏(第一屏和最后一屏) 页数
me.__cornerPageCount = 4;
//布局状态
me.__layerStatus = null;
//每页数量。
me.__lineCount = lineCount;
//存放数据的对象。XML数据通过xsl转换成字符串后保存在__dataObject的innerHTML属性中。
me.__dataObject = dataObject;
//收到的XML数据。
me.__xmlString = null;
//收到的XSL数据。
me.__xslString = null;
//新的请求页。
me.__newPage = 1;
//描述对象
me.__descObject = null;
//页码录入对象
me.__pageInputObject = null;
//页数
me.__pageCount = Math.ceil(recordCount / lineCount);
//获取或者设置当前页。
me.CurrentPage = 1;
//加载数据时的列表行为。
me.__onLoading = function()
{
if (null!=me.__descObject)
me.__descObject.innerText = "正在加载......";
}
//XML数据加载完毕时的回调函数
me.__onXmlLoaded = function(res)
{
me.__xmlString = res.value;
me.__onListLoaded();
}
//XSL数据加载完毕时的回调函数
me.__onXslLoaded = function(res)
{
me.__xslString = res.value;
me.__onListLoaded();
}
//数据加载完毕时的处理。
//即把XML通过XSL转换为字符串赋给__dataObject的innerHTML属性。
me.__onListLoaded = function()
{
if (null!=me.__xmlString && null!=me.__xslString)
{
var oXml = createXMLDom();
oXml.resolveExternals = false;
if (IsIE())
{
oXml.loadXML(me._XmlString);
}
else
{
var oParser=new DOMParser();
oXml=oParser.parseFromString(me._XmlString,"application/xml");
}
var oXsl = createXMLDom();
oXsl.resolveExternals = false;
if (IsIE())
{
oXsl.loadXML(me._XslString);
}
else
{
var oParser=new DOMParser();
oXsl=oParser.parseFromString(me._XslString,"application/xml");
}
var s = transformNode(oXml,oXsl);
setInnerHTML(dataObject, s); //刘丹 2007-4-24 修改为使用setInnerHTML函数
if (null!=me.__descObject)
me.__descObject.innerText = "";
me.__generatePageView();
me.__xmlString = null;
me.CurrentPage = me.__newPage; //最后一步执行。避免其它方法使用__newPage时出现问题。
}
}
//获取XML数据的方法。需要派生类实现。
//派生类调用AjaxPro方法时,callback为me.onXmlLoaded。
me.__requestXml = null;
//获取XSL数据的方法。需要派生类实现。
//派生类调用AjaxPro方法时,callback为me.onXslLoaded。
me.__requestXsl = null;
//获取指定页的数据
me.NavigatePage = function(page)
{
if (isNaN(page))
page = 1;
page = page * 1; //转换为number类型
if (page==me.CurrentPage) return;
me.__newPage = (page>me.__pageCount?me.__pageCount:page<=0?1:page);
me.RefreshPage();
return false;//如果是链接则不刷新页面。
}
//刷新当前页
me.RefreshPage = function()
{
me.__xmlString = null;
me.__onLoading();
me.__requestXml(me.__newPage);
if (null==me.__xslString)
me.__requestXsl();
//me.__generatePageView();me.CurrentPage = me.__newPage; //测试用
}
//重新设置总条数(用于计算总页数)
me.ResetRecordCount = function(newRecordCount)
{
me.__pageCount = Math.ceil(newRecordCount / lineCount);
}
//获取首页数据
me.FirstPage = function()
{
me.NavigatePage(1);
}
//获取前页数据
me.PreviousPage = function()
{
if (1==me.CurrentPage)
return;
me.NavigatePage(me.CurrentPage - 1);
}
//获取后页数据
me.NextPage = function()
{
if (me.__pageCount==me.CurrentPage)
return;
me.NavigatePage(me.CurrentPage + 1);
}
//初始化操作对象
me.__initObjects = function(dataObject)
{
//初始化操作对象
var objects = dataObject.parentElement.children;
var oFuncLine = null;
for (var i=0; i
=0; i--)
me.__funcObject.removeChild(me.__funcObject.children(i));
}
me.__generatePageView = function()
{
me.__clearPage();
if (me.__pageCount<=1) return;
var obj;
obj = me.__generatePageButton("上一页", me.PreviousPage);
if (me.__pageCount<=me.__middlePageCount + 2 * me.__remainPageCount)
me.__generateIdentityPage(1, me.__pageCount);
else
{
var point1 = me.__remainPageCount + Math.floor((me.__middlePageCount + 1) / 2) + 1;
var point2 = me.__pageCount - me.__remainPageCount - Math.floor(me.__middlePageCount / 2) - 1;
if (me.__newPage<=me.__remainPageCount)
{
me.__generateIdentityPage(1, me.__cornerPageCount);
me.__generateSuspensionPoint();
me.__generateIdentityPage(me.__pageCount - me.__remainPageCount + 1, me.__pageCount);
}
else if (me.__remainPageCount= 0 && ua.indexOf('opera') < 0) {
if (typeof(htmlCode)=="object") {
el.innerHTML = '';
el.appendChild(htmlCode);
}
else {
htmlCode = 'for IE
' + htmlCode;
htmlCode = htmlCode.replace(/