用UL列表实现树目录(带连接线)
下面是我做的树,定义树的结构用xml文件,动态增加节点也用xml。
和梅花雪的对比了一下,初始化的速度慢了好多。xmldom的速度慢是个大原因,但除了这一部分,运行的时间还是比梅花雪的要多(我的也是参考梅花雪的异步显示,第一次只显示第一级节点,其他的点击展开时再生成html)。
看来还是有差距。哪位高手给指点指点,再提高一下速度。
//mytree.js
function MyTree(treename)
{
if(typeof(treename) != "string" || treename == "") throw(new Error(-1, '没有定义树的名字!'));
this.link = "#";
this.target = "_self";
this.imgpath = "image/";
this.xmlfile = "xmltree.xml";
this.name = treename;
this.current = "";
this.node = {};
this.node["root"] = {"childnodes":[]};
this.sty='<style>.MyTree {font-size:12px;} .MyTree ul {padding-left:0px!important; padding-left:0px; margin-left:0px!important; margin-left:0px; background-image:url("'+this.imgpath+'back.gif"); background-repeat: repeat-y;} .MyTree ul.nobg {background-position:-10px;} .MyTree ul li {list-style:none; padding-left:20px;}.MyTree ul li.first{padding-left:0px;} .MyTree A {outline: none; PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-TOP: 3px; PADDING-BOTTOM: 1px; color: #000060; TEXT-DECORATION: none} .MyTree A:hover {background: #7386ba; color: #fff; TEXT-DECORATION: none}</style>';
this.createXMLDOM = function()
{
var xmldom;
if (window.ActiveXObject)
{ var ActiveX = new Array("MSXML2.DOMDocument.5.0","MSXML2.DOMDocument.4.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument","Microsoft.XMLDOM","MSXML.DOMDocument");
for(var i=0;i<ActiveX.length;i++)
{ try{ xmldom = new ActiveXObject(ActiveX[i]);break;}catch(e){} }
}
else
{ if (document.implementation && document.implementation.createDocument)
{ var xmldom = document.implementation.createDocument("","doc",null);}
}
xmldom.async = false;
xmldom.resolveExternals = false;
xmldom.validateOnParse = false;
xmldom.preserveWhiteSpace = true;
return xmldom;
};
this.loadXML = function(xml)
{
var ie = (window.ActiveXObject)?true:false, flag=false;
var obj = this.createXMLDOM();
if(xml==null || xml=='') flag=obj.load(this.xmlfile); else { //没有参数,就从文件读xml
if(ie) flag=obj.loadXML(xml); else {
var oParser=new DOMParser();
var obj=oParser.parseFromString(xml,"text/xml");
flag=true;
}}
if (flag)
{ var nodes=obj.getElementsByTagName('node');
if (nodes != null && nodes.length > 0)
{ var id='',pid='';
for(var i=0;i<nodes.length;i++)
{ id=nodes[i].getAttribute('id');
pid=nodes[i].getAttribute('pid');
if(typeof(this.node[pid])=="undefined") continue;//xml中如果子节点出现在母节点前,这个子节点将被忽略
this.node[id]=
{ "id":id,
"pid":pid,
"name":nodes[i].getAttribute('name'),
"isload":false
//"childnodes":[]
};
if(nodes[i].getAttribute('link')!=null) this.node[id].link=nodes[i].getAttribute('link');
if(nodes[i].getAttribute('target')!=null) this.node[id].target=nodes[i].getAttribute('target');
if(nodes[i].getAttribute('icon')!=null) this.node[id].icon=nodes[i].getAttribute('icon');
if(nodes[i].getAttribute('method')!=null) this.node[id].method=nodes[i].getAttribute('method');
if(typeof(this.node[pid].childnodes)=="undefined") this.node[pid].childnodes=[];
this.node[pid].childnodes[this.node[pid].childnodes.length]=this.node[id];
}
} else alert('No Valid treeNode!');
} else alert('XML Data Load Error!');
obj=null;
};
this.buildchild = function(id,end)
{
var ohtml='',icon1='',icon2='';
var classname=(end==true)?' class="nobg"':'';
if(typeof(this.node[id].childnodes)=="undefined") return ohtml;
var cn=this.node[id].childnodes;
if(cn.length>0)
{
ohtml='<SPAN style="display:none;"><UL'+ classname +'>';
for(var i=0;i<cn.length;i++)
{ if(typeof(cn[i].childnodes)=="undefined") {icon1=((i==cn.length-1)?'l2.gif':'l1.gif');icon2=(typeof(cn[i].icon)=="undefined")?'file.gif':cn[i].icon;} else {icon1=((i==cn.length-1)?'p2.gif':'p1.gif');icon2='folder.gif';}
ohtml+='<LI id="mytree_' + cn[i].id + '"><SPAN onclick="'+ this.name +'.clickhandle('+ cn[i].id +',event);"><IMG align=absmiddle src="'+ this.imgpath + icon1 +'"><IMG align=absmiddle src="'+ this.imgpath + icon2 +'"><A hidefocus onfocus="'+ this.name +'.focusid('+ cn[i].id +')" href="'+ ((typeof(cn[i].link)=="undefined")?this.link:cn[i].link) +'" target="'+ ((typeof(cn[i].target)=="undefined")?this.target:cn[i].target) +'">'+ cn[i].name +'</a></SPAN></LI>';
}
ohtml+='</UL></SPAN>';
this.node[id].isload=true;
}
return ohtml;
};
this.tostring = function(dynamic)
{
if(dynamic!=true) this.loadXML();
var ohtml='',icon1='',icon2='';
var cn=this.node["root"].childnodes;
if(cn.length>0)
{ ohtml='<SPAN onclick="'+ this.name +'.clickhandle('+cn[0].id+',event);"><IMG align=absmiddle src="'+ this.imgpath + ((typeof(cn[0].icon)=="undefined")?'root.gif':cn[0].icon)+ '"><A style="color:#ffffff; background:#0A246A;" hidefocus onfocus="'+ this.name +'.focusid('+ cn[0].id +')" href="'+ ((cn[0].link==null)?this.link:cn[0].link) +'" target="'+ ((cn[0].target==null)?this.target:cn[0].target) +'">'+ cn[0].name +'</A></SPAN><SPAN><UL class="nobg" style="margin-top:0px;">';//顶层节点,只取第一个
this.current=cn[0].id;
if(typeof(cn[0].childnodes)!="undefined")
{ cn[0].isload=true;
cn=cn[0].childnodes;
for(var i=0;i<cn.length;i++)
{ if(typeof(cn[i].childnodes)=="undefined") {icon1=((i==cn.length-1)?'l2.gif':'l1.gif');icon2=(typeof(cn[i].icon)=="undefined")?'file.gif':cn[i].icon;} else {icon1=((i==cn.length-1)?'p2.gif':'p1.gif');icon2='folder.gif';}
ohtml+='<LI class="first" id="mytree_' + cn[i].id + '"><SPAN onclick="'+ this.name +'.clickhandle('+ cn[i].id +',event);"><IMG align=absmiddle src="'+ this.imgpath + icon1 +'"><IMG align=absmiddle src="'+ this.imgpath + icon2 +'"><A hidefocus onfocus="'+ this.name +'.focusid('+ cn[i].id +')" href="'+ ((typeof(cn[i].link)=="undefined")?this.link:cn[i].link) +'" target="'+ ((typeof(cn[i].target)=="undefined")?this.target:cn[i].target) +'">'+ cn[i].name +'</a></SPAN></LI>';
}
}
ohtml+='</UL></SPAN>';
}
if(dynamic==true) return ohtml;
return '<DIV class="MyTree" id="mytree_'+this.node['root'].childnodes[0].id+'">'+ohtml+'</DIV>'+this.sty;
};
相关推荐
js移动端树型列表
简介,易修改的移动端js树型列表
纯CSS打造族谱树形结构:零依赖、可打印的前端方案
在信息展示类页面中,树形结构是最直观的层级表达方式之一,而如何在不引入重型图表库的前提下实现高性能、可维护的树形布局,是许多前端开发者关注的问题。CSS布局技术凭借其强大的选择器和伪元素能力,能够通过嵌套的ul/li元素勾勒出清晰的树状连线,实现从纵向往横行的多方向延伸。这种方案不仅让页面加载更快、文字可选中,还天然支持搜索引擎收录与打印样式定制,非常适合族谱展示、组织架构图、目录索引等以内容阅读为主的场景。本文结合具体实践,拆解利用纯CSS构建树形结构的连线原理、边界处理与响应式适配技巧,为同类需求提供一
网页HTML 有序列表ol 和无序列表 ul
用于组织数据的列表 学习了这么多控制网页显示的HTML标签,读者可以初步制作纯文章页面了。本节学习HTML中的列表元素,列表形式在网站设计中占有比较大的比重,显示信息非常整齐直观,便于用户理解。在后面的CSS样式学习中将大量使用到列表元素的高级作用。 4.4.1 列表的结构组成 HTML的列表元素是一个由列表标签封闭的结构,包含的列表项由<li></li>组成。具体结构如图4.17所示。 4.4.2 制作无序列表 顾名思义,无序列表就是列表结构中的列表项没有先后顺序的列表形式。大部分网页应用中的列表均采用无序列表,其列表标签采用<ul></ul>,编写方法如下: <ul> <li
CSS的ul和li实现横向排列和去掉li的点
怎么实现ul的横向排列和去掉li那个烦人的点,现在找到方法了,在此与大家分享下,感兴趣的朋友可以参考下,以备不时之需
jquery+css+ul模拟列表菜单具体实现思路
代码如下: <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> <html xmlns=”http://www.w3.org/1999/xhtml”> <head> <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ /> <title>jquery用ul模拟表单select列表菜单效果</title> <script ty


