📄 xmlseltree.js
字号:
/************************************************
** 文件名:
** Copyright (c) 2003
** 创建人: moonpiazza
** 日 期: 2003.6.29
** 修改人:
** 日 期:
** 描 述: XML菜单树
**
** 版 本: 1.0
************************************************/
var m_oConfig ;
function TreeConfig(p_sXSLFile, p_oSrcDiv, p_bAutoGoFisrtLeaf, p_bChangeLeafImg)
{
this.bImgAsync = true ; // 点击图标的时候是否不选中该节点
// true: 不选中该节点;
// false: 选中该节点
this.bShowElseBranch = true ; // 是否显示当前菜单分枝以外的菜单分枝
// false: 只显示当前1个分枝,隐藏其他分枝;
// true: 显示已经展开的分枝
if (true == p_bChangeLeafImg) // 当叶节点获得焦点,是否改变图标
this.bChangeLeafImg = true; // true: 改变;
else // false: 不改变
this.bChangeLeafImg = false;
this.bDataAsync = false ; // 异步读取数据(每次是否都从新读入数据)
// true: 不是;
// false: 是
this.bCheckDataAsync = true ; // 异步读取数据(每次是否都从新读入数据)
// true: 不是;
// false: 是
this.bUseCheck = true ; // 是否启用选择
this.sSelVal = "" ; // 选择的值
this.oSrcDiv = p_oSrcDiv ; //
this.sCheckKey = "," ; // checkdata 分隔符
this.bCheckAsync = true; // 当节点获得焦点,是否选中
// true: 不选中;
// false: 选中
this.bCheckShowBranch = false; // 当枝节点选中,是否展开子节点
// true: 展开;
// false: 不展开
if (true == p_bAutoGoFisrtLeaf) // 是否自动点击当前节点下第一个有'链接'的节点
this.bAutoGoFisrtLeaf = true; // true: 自动;
else // false: 不自动
this.bAutoGoFisrtLeaf = false;
this.bAutoScroll = false ;
this.oCurrentNode = "moonpiazza" ; // 当前节点
this.sLoadingText = "Loading..." ;
this.sClsMouseDown = "clsMouseDown" ;
this.sClsMouseOver = "clsMouseOver" ;
this.sClsCurrentFocus = "clsCurrentFocus"
this.oXSLDoc = new ActiveXObject("Microsoft.XMLDOM") ; // xsl文档对象,显示xml数据
this.oXSLDoc.async = false ;
this.oXSLDoc.load(p_sXSLFile) ;
}
/************************************************
** InitTree()
************************************************/
function InitTree(p_sXMLFile, p_sXSLPath, p_oSrcDiv, p_bAutoGoFisrtLeaf, p_bChangeLeafImg)
{
var bIE = (navigator.appName=="Microsoft Internet Explorer")?true:false ;
if (!bIE)
{
alert('你的浏览器不是IE浏览器,XMlSelTree不支持此浏览器,谢谢你的支持!');
return false ;
}
var sXSLPath = ("/" == (p_sXSLPath.charAt((p_sXSLPath.length-1))) ) ? p_sXSLPath:(p_sXSLPath + '/')
var sXSLFile = sXSLPath + GetXSLFileName() ;
m_oConfig = new TreeConfig(sXSLFile, p_oSrcDiv, p_bAutoGoFisrtLeaf, p_bChangeLeafImg) ;
var oXMLDom = new ActiveXObject("Microsoft.XMLDOM") ;
oXMLDom.async = false ;
oXMLDom.load(p_sXMLFile) ;
var sHtml = oXMLDom.transformNode(m_oConfig.oXSLDoc) ;
p_oSrcDiv.innerHTML = sHtml ;
if (m_oConfig.bAutoGoFisrtLeaf)
{
GoFisrtLink( p_oSrcDiv.getElementsByTagName("DIV")[0] ) ;
}
}
/*************************************************************************
** GetXSLFileName()
*************************************************************************/
function GetXSLFileName()
{
var sReturnVal ;
var oAgent = navigator.userAgent ;
var fIEVersion = parseFloat(oAgent.substring(oAgent.indexOf("MSIE ")+5, oAgent.indexOf(";",oAgent.indexOf("MSIE ")))) ;
if (fIEVersion < 6)
{
sReturnVal = "XMLSelTreeforIE5.xsl" ;
}
else
{
sReturnVal = "XMLSelTree.xsl" ;
}
return sReturnVal ;
}
/*************************************************************************
** selectstart()
*************************************************************************/
function selectstart()
{
window.event.cancelBubble = true;
window.event.returnValue = false;
return false;
}
//-------------------------------------------------------------------------------------------------
// 获得(设置)数据 GET (SET) FUNCTIONS
//-------------------------------------------------------------------------------------------------
/*************************************************************************
** GetXML(p_sXMLSrc, p_oContainerElement, p_sContainerElementState)
*************************************************************************/
function GetXML(p_sXMLSrc, p_oContainerElement)
{
var sHtml = "" ;
var oXMLDom = new ActiveXObject("Microsoft.XMLDOM") ;
oXMLDom.async = false ;
oXMLDom.load(p_sXMLSrc) ;
if ( (oXMLDom != null) && (oXMLDom.xml != "") )
{
if (m_oConfig.oXSLDoc.xml != "")
{
sHtml = oXMLDom.transformNode(m_oConfig.oXSLDoc) ;
}
if ( (sHtml != null) && (sHtml != "") )
{
p_oContainerElement.innerHTML = sHtml ;
p_oContainerElement.className = "shown" ;
}
}
}
/************************************************
** GetChildElement(p_oSrcElement, p_sType)
** 功能:定位某节点中子节点对象(子节点类型唯一:type)
************************************************/
function GetChildElement(p_oSrcElement, p_sType)
{
var i = 0 ;
var oReturnValue = null ;
var oChildren = null ;
if(p_oSrcElement!=null)
{
oChildren = p_oSrcElement.children ;
}
if (oChildren != null)
{
for (i=0; i < oChildren.length; i++)
{
if ( (oChildren[i].type==p_sType) || (p_sType == null) )
{
oReturnValue = oChildren[i] ;
break ;
}
}
}
return oReturnValue ;
}
/************************************************
** GetParentElement(p_oSrcElement)
************************************************/
function GetParentElement(p_oSrcElement)
{
var oReturnValue = null ;
if ( (p_oSrcElement!=null) && (p_oSrcElement.parentElement != null) )
{
oReturnValue = p_oSrcElement.parentElement.parentElement ;
}
if ( (oReturnValue != null) && (oReturnValue.type!="branch") )
{
oReturnValue = null ;
}
return oReturnValue ;
}
/************************************************
** GetImgSrc(p_sImgSrc, p_sType)
** 功能:获得图标路径
************************************************/
function GetImgSrc(p_sImgSrc, p_sType)
{
var sReturnVal ;
var aImgSrcInfo ;
var sImgPath, sImgType ;
aImgSrcInfo = p_sImgSrc.split(".") ;
sImgType = aImgSrcInfo[ (aImgSrcInfo.length-1) ] ;
sImgPath = p_sImgSrc.substring(0, (p_sImgSrc.length - (sImgType.length + 2) ) ) ;
sReturnVal = sImgPath + p_sType + "." + sImgType ;
return sReturnVal ;
}
/************************************************
** GoFisrtLink(p_oSrcElement)
************************************************/
function GoFisrtLink(p_oSrcElement)
{
if (null == p_oSrcElement) return ;
if (m_oConfig.oCurrentNode != "moonpiazza")
{
var oTag = m_oConfig.oCurrentNode.getElementsByTagName("SPAN")[0];
var oLink = GetChildElement(oTag, "link") ;
if (null != oLink) return ;
}
var oTag = p_oSrcElement.getElementsByTagName("SPAN")[0];
var oLink = GetChildElement(oTag, "link") ;
ShowHideNode(p_oSrcElement) ;
SelectNode(p_oSrcElement) ;
if (null != oLink)
{
return ;
}
else
{
oTag = oTag.parentElement.getElementsByTagName("DIV")[1] ;
GoFisrtLink(oTag);
}
}
/************************************************
** GetAllCheckData()
** 功能:获得节点返回值:CheckData
************************************************/
function GetAllCheckData()
{
var sReturnVal = "";
var i ;
var sTmpVal ;
var bEnsData ;
var oCheck = m_oConfig.oSrcDiv.getElementsByTagName("INPUT") ;
var nLen = oCheck.length ;
for (i=0; i<nLen; i++)
{
if (oCheck[i].checked)
{
sTmpVal = oCheck[i].value;
if (('0' == oCheck[i].read) && ('' != oCheck[i].src) )
{
sTmpVal = GetCheckUrlData(oCheck[i].src);
}
bEnsData = ((m_oConfig.sCheckKey + sReturnVal + m_oConfig.sCheckKey).indexOf((m_oConfig.sCheckKey + sTmpVal + m_oConfig.sCheckKey)) > 0 ) ;
if (!bEnsData)
{
sReturnVal += m_oConfig.sCheckKey + sTmpVal ;
}
}
}
sReturnVal = sReturnVal.replace(m_oConfig.sCheckKey, '');
return sReturnVal ;
}
/************************************************
** SetCheck(p_oSrcElement, p_bAsync)
** 功能:
************************************************/
function SetCheck(p_oSrcElement, p_bAsync)
{
if (null == p_oSrcElement) return ;
SetChildrenCheck(p_oSrcElement, p_bAsync) ;
SetParentElementCheck(p_oSrcElement) ;
return ;
}
/************************************************
** SetParentElementCheck(p_oSrcElement)
** 功能:
************************************************/
function SetParentElementCheck(p_oSrcElement)
{
var bChecked = p_oSrcElement.checked ;
var oTargetNode = p_oSrcElement.parentElement.parentElement ;
if (bChecked)
{
var oCheck = oTargetNode.getElementsByTagName("INPUT") ;
var nLen = oCheck.length ;
var i ;
for (i=0; i<nLen; i++)
{
if (!oCheck[i].checked)
{
return ;
}
}
}
var oTargetNode = GetChildElement(p_oSrcElement.parentElement.parentElement.parentElement, "checkbox") ;
if (null != oTargetNode)
{
oTargetNode.checked = bChecked ;
SetParentElementCheck(oTargetNode) ;
}
return ;
}
/************************************************
** SetChildrenCheck(p_oSrcElement, p_bAsync)
** 功能:***
************************************************/
function SetChildrenCheck(p_oSrcElement, p_bAsync)
{
var oContainerElement = GetChildElement(p_oSrcElement.parentElement, "container") ;
if (null == oContainerElement) return ;
var i ;
var bChecked = p_oSrcElement.checked ;
var oCheck = oContainerElement.getElementsByTagName("INPUT") ;
var nLen = oCheck.length ;
if ( (p_bAsync) && (bChecked) )
{
for (i=0; i<nLen; i++)
{
oCheck[i].checked = true;
}
}
else
{
for (i=0; i<nLen; i++)
{
oCheck[i].checked = bChecked;
}
}
return ;
}
/************************************************
** SetOneCheckData(p_oSrcElement)
** 功能:获得当前节点返回值:CheckData
************************************************/
function SetOneCheckData(p_oSrcElement)
{
var sReturnVal = "";
var sVal = p_oSrcElement.value ;
var sCheckDataSrc = p_oSrcElement.src ;
if ( (sVal.length < 1) || (!m_oConfig.bCheckDataAsync) )
{
sReturnVal = GetCheckUrlData(sCheckDataSrc) ;
p_oSrcElement.value = sReturnVal ;
}
return ;
}
/************************************************
** GetCheckUrlData(p_sURL)
** 功能:获得URL返回值:CheckData
************************************************/
function GetCheckUrlData(p_sURL)
{
var sReturnVal = "";
var oXMLHttp = new ActiveXObject ("Microsoft.XMLHTTP");
oXMLHttp.Open("get", p_sURL, false);
oXMLHttp.Send("");
sReturnVal = oXMLHttp.responseText;
return sReturnVal ;
}
//-------------------------------------------------------------------------------------------------
// 节点事件 (自身状态改变)
//-------------------------------------------------------------------------------------------------
/************************************************
** SelectNode(p_oSrcElement)
************************************************/
function SelectNode(p_oSrcElement)
{
UpdateMessages(p_oSrcElement) ;
HighlightNode(p_oSrcElement) ;
LoadNodeContent(p_oSrcElement) ;
ScrollIntoView(p_oSrcElement) ;
if ( (m_oConfig.bUseCheck) && (!m_oConfig.bCheckAsync) )
{
var oTargetNode = GetChildElement(p_oSrcElement, "checkbox") ;
if (null != oTargetNode)
{
oTargetNode.click();
}
}
}
/************************************************
** HighlightNode(p_oSrcElement)
************************************************/
function HighlightNode(p_oSrcElement)
{
var oNewLabel ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -