jquery 树型插件 -- jquery.treeview

1. 地址:
http://dev.jquery.com/browser/trunk/plugins/treeview

可以下载 jquery.treeview.zip,其中包含了jquery.treeview.js 和压缩版,还有例子。

2. 起步

自带的例子页面中有三个例子,比较长,我只试验第一个。
在解压后的目录中建测试页面,并把 jquery.js 也考到这个目录

代码:
//treetest.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional
//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME=
"Generator" CONTENT="EditPlus">
<META NAME=
"Author" CONTENT="">
<META NAME=
"Keywords" CONTENT="">
<META NAME=
"Description" CONTENT="">
<script src=
"jquery-1.1.2.pack.js"
type=
"text/javascript"></script>
<script src=
"jquery.treeview.pack.js"
type=
"text/javascript"></script>
<style type=
"text/css">

.treeview, .treeview ul {
padding: 0;
margin: 0;
list-style: none;
}

.treeview li {
margin: 0;
padding: 4px 0 3px 20px;
}

.treeview li {
background:url(images/tv-item.gif) 0 0 no-repeat;}
.treeview .collapsable {
background-image: url(images/tv-collapsable.gif);}
.treeview .expandable {
background-image: url(images/tv-expandable.gif);}
.treeview .last {
background-image: url(images/tv-item-last.gif);}
.treeview .lastCollapsable {
background-image:
url(images/tv-collapsable-last.gif); }
.treeview .lastExpandable {
background-image:
url(images/tv-expandable-last.gif); }
</style>
<script type=
"text/javascript">

function test(){
$(
"#tree_container ul").Treeview();
}
</script>
</HEAD>

<BODY>
<div id=
"">
  <input type=
"button" name="ttt" value="ttt"
onclick=
"test()"/>
</div>
<div id=
"tree_container">
<ul>
  <li>Item 1
    <ul>
      <li>Item 1.1</li>
    </ul>
  </li>
  <li class=
"closed">Item 2 (starts closed)
    <ul>
      <li>Item 2.1
        <ul>
          <li>Item 2.1.1</li>
          <li>Item 2.1.2</li>
        </ul>
      </li>
      <li>Item 2.2</li>
    </ul>
  </li>
  <li>Item 3</li>
</ul>
</div>
</BODY>
</HTML>



点击按钮后,普通的项目列表就转换成了相同结构的树,很方便。
他默认状态下树是展开的,如果想是闭合的就要像“Item 2”一样,给li加"closed"样式。

3. 实例

我的应用场景:从服务器取得Document对象,页面以树形结构显示,默认闭合,点击某个节点就把其值传给目标输入框
Document 结构:

<root>
  <001 name=
"c001">
    <0001 name=
"c0001"/>
    <0002 name=
"c0002"/>
  </001>
</root>

标签的name属性值为页面上显示的,标签名为实际的值。



//参数data为传回的Document
function callback(data){
//取得树的显示区域根节点
var container = document.
getElementById(
"container");
//先清理此节点
removeChild(container);
//取得Document中根节点,
//注意firefox下可能要取[0];
var root = data.childNodes[1];
//遍历Document,构造项目列表,
//"ul"表示子树,"li"表示具体条目
recur_travel(root, container);
//调用jquery.treeview 构造树
$(
"#container ul").Treeview();
}

//遍历Document,构造项目列表
function recur_travel(node, parentItem){
  for(var i=0; i<node.childNodes.length; i++){
    var name = node.childNodes<i>.
attributes[0].value;
    var value = node.childNodes<i>.tagName;
    
//建立新节点"ul"
    var ulNode = createElement(
"ul");
    
//建立新节点"li"
    var liNode = createElement(
"li");
    liNode.id = value;
    liNode.className =
"closed";
    
//returnTreeValue函数
    
//用于返回选定节点的值给目标输入框
    liNode.innerHTML =
"<a href='####'
onclick='returnTreeValue(this)'>
" + name
+
"</a>";
    ulNode.appendChild(liNode);
    parentItem.appendChild(ulNode);

    
//递归子节点
    recur_travel(node.childNodes<i>, liNode);
  }
}


irini   2007-06-14 21:52:00 评论:3   阅读:1740   引用:0
无题 @2008-09-04 19:12:59  
这段代码很有用,只是需要自己改改。
@2008-06-12 16:08:38  游客
这个例子写完后不能正常运行啊,请指点下吧 谢谢
@2008-06-12 10:47:11  游客
removeChild(container);为什么这行总是报错啊

发表评论>>

署名发表(评论可管理,不必输入下面的姓名)

姓名:

主题:

内容: 最少15个,最长1000个字符

验证码: (如不清楚,请刷新)

Copyright@2008 powered by YuLog