YUI 建立无刷新的N级树
转自:http://www.cnblogs.com/goody9807/archive/2008/03/10/1086475.html
1、首先你要去下面地址下载yahoo类库
http://developer.yahoo.com/yui/
2。5版本的 8。84M,你可以不全用,只用树的
2、然后需要把yui/build/treeview/文件夹下面的文件复制到你的工程
3、需要引用下面的js
<
link rel
=
"
stylesheet
"
type
=
"
text/css
"
href
=
"
/yui/build/treeview/assets/skins/sam/treeview.css
"
/
>
<
link rel
=
"
stylesheet
"
type
=
"
text/css
"
href
=
"
/yui/build/menu/assets/skins/sam/menu.css
"
>
<
script type
=
"
text/javascript
"
src
=
"
/yui/build/yahoo/yahoo.js
"
><
/
script>
<
script type
=
"
text/javascript
"
src
=
"
/yui/build/event/event.js
"
><
/
script>
<
script type
=
"
text/javascript
"
src
=
"
/yui/build/treeview/treeview.js
"
><
/
script>
<!--
Dependency source files
-->
<
script type
=
"
text/javascript
"
src
=
"
/yui/build/yahoo-dom-event/yahoo-dom-event.js
"
><
/
script>
<
script type
=
"
text/javascript
"
src
=
"
/yui/build/container/container_core.js
"
><
/
script>
<!--
Menu source file
-->
<
script type
=
"
text/javascript
"
src
=
"
/yui/build/menu/menu.js
"
><
/
script>
页面html代码
<
div
class
="yui-skin-sam"
>
<
div
id
="treeDiv1"
>
</
div
>
</
div
>
所有的js代码
<
script type
=
"
text/javascript
"
>
var
channelId
=
0
;
var
treeId
=
0
;
function
LoadChannelTree(obj)
{
channelId
=
obj.value;
if
(channelId
!=
0
)
{
var
ds_Normal
=
AjaxForTree.GetTree(channelId).value;
if
(ds_Normal
!=
null
&&
typeof
(ds_Normal)
==
"
object
"
&&
ds_Normal.Tables.length
!=
0
&&
ds_Normal.Tables[
0
].Rows.length
!=
0
)
{
treeId
=
ds_Normal.Tables[
0
].Rows[
0
].TreeId;
treeInit();
//
alert(treeId);
}
else
{
treeId
=
0
;
document.getElementById(
"
treeDiv1
"
).innerHTML
=
"
<a href='#' style='text-
decoration:underline;' onclick='initChannelTree();'>该频道下还没有TAG树,请点击这里
创建TAG树。</a>
"
;
}
document.getElementById(
"
releaseTreeSpan
"
).style.display
=
"
block
"
;
}
else
{
document.getElementById(
"
releaseTreeSpan
"
).style.display
=
"
none
"
;
document.getElementById(
"
treeDiv1
"
).innerText
=
""
;
}
document.getElementById(
"
releaseTree
"
).href
=
"
/Tag/TagTreePosition.aspx?TreeId=
"
+
treeId
+
"
&placeValuesBeforeTB_=savedValues&TB_iframe=true&height=500&width=770
"
;
}
function
LoadNodeContent(nodeId)
{
var
param
=
"
NodeId=
"
+
nodeId;
ShowContentA(
"
/controls/Tag/TagListForTree.ashx
"
,param,document.getElementById(
"
NodeContent
"
),
null
);
}
function
initChannelTree()
{
var
res
=
AjaxForTree.CreateTree(channelId).value;
if
(res
!=-
1
)
{
treeId
=
res;
treeInit();
}
else
{
document.getElementById(
"
treeDiv1
"
).innerHTML
=
"
树创建失败!
"
;
}
}
//
global variable to allow console inspection of tree:
var
tree;
var
currentTreeNodeId;
var
oTextNodeMap
=
{};
function
treeInit() {
tree
=
new
YAHOO.widget.TreeView(
"
treeDiv1
"
);
var
myobj
=
"
{label:'所有',id:'1'}
"
;
myobj
=
eval(
'
(
'
+
myobj
+
'
)
'
);
var
rootNode
=
new
YAHOO.widget.TextNode(myobj, tree.getRoot(),
true
);
oTextNodeMap[rootNode.labelElId]
=
rootNode;
buildChildNodeTree(rootNode,treeId);
tree.subscribe(
"
expand
"
,
function
(node) {
});
tree.subscribe(
"
collapse
"
,
function
(node) {
});
//
Trees with TextNodes will fire an event for when the label is clicked:
tree.subscribe(
"
labelClick
"
,
function
(node) {
var
nodeId
=
node.data.id;
document.getElementById(
'
TagBtnList
'
).style.display
=
''
;
document.getElementById(
'
addTags
'
).href
=
'
/Tag/SelectTreeTag.aspx?TreeNodeId=
'
+
nodeId
+
'
&placeValuesBeforeTB_=savedValues&TB_iframe=true&height=500&width=770
'
;
//
document.getElementById('addTags').href='/PositionMore.aspx?placeValuesBeforeTB_=savedValues&TB_iframe=true&height=500&width=770';
LoadNodeContent(nodeId);
currentTreeNodeId
=
nodeId;
});
//
alert(tree.getRoot());
//
The tree is not created in the DOM until this method is called:
tree.draw();
}
function
buildChildNodeTree( node )
{
var
nodeId
=
node.data.id;
//
alert(nodeId);
var
ds_Normal
=
AjaxForTree.GetChildNode(nodeId,treeId).value;
if
(ds_Normal
!=
null
&&
typeof
(ds_Normal)
==
"
object
"
&&
ds_Normal.Tables
!=
null
)
{
for
(
var
i
=
0
;i
<
ds_Normal.Tables[
0
].Rows.length;i
++
)
{
var
TreeNodeId
=
ds_Normal.Tables[
0
].Rows[i].TreeNodeId;
var
TreeNodeName
=
ds_Normal.Tables[
0
].Rows[i].TreeNodeName;
var
myobj
=
"
{label:'
"
+
TreeNodeName
+
"
',id:'
"
+
TreeNodeId
+
"
'}
"
;
myobj
=
eval(
'
(
'
+
myobj
+
'
)
'
);
var
tmpNode
=
new
YAHOO.widget.TextNode(myobj, node,
true
);
oTextNodeMap[tmpNode.labelElId]
=
tmpNode;
ds_child
=
AjaxForTree.GetChildNode(TreeNodeId,treeId).value;
if
(ds_child
!=
null
&&
ds_child.Tables
!=
null
&&
ds_child.Tables[
0
].Rows.length
!=
0
)
{
//
alert(ds_child.Tables[0].Rows.length);
tmpNode.setDynamicLoad(loadDataForNode);
}
}
}
}
//
Add an onDOMReady handler to build the tree when the document is ready
//
YAHOO.util.Event.onDOMReady(treeInit);
function
loadDataForNode(node, onCompleteCallback) {
buildChildNodeTree(node,treeId);
onCompleteCallback();
}
/*
The YAHOO.widget.TextNode instance whose "contextmenu"
DOM event triggered the display of the
ContextMenu instance.
*/
var
oCurrentTextNode
=
null
;
/*
Adds a new TextNode as a child of the TextNode instance
that was the target of the "contextmenu" event that
triggered the display of the ContextMenu instance.
*/
function
addNode() {
var
sLabel
=
window.prompt(
"
请
为新建立的节点输入名称:
"
,
""
);
var
rtn
=
CheckIsValid(sLabel);
if
(
!
rtn)
{
alert(
'
您输入的内容中含有非法字符,这里只允许输入字母或数字!
'
);
return
;
}
if
(sLabel
&&
sLabel.length
>
0
) {
var
nodeId
=
oCurrentTextNode.data.id;
var
res
=
AjaxForTree.AddTreeNode(nodeId,sLabel,treeId).value;
//
alert(res);
treeInit();
}
}
/*
Edits the label of the TextNode that was the target of the
"contextmenu" event that triggered the display of the
ContextMenu instance.
*/
function
editNodeLabel() {
if
(oCurrentTextNode.data.id
==
1
)
{
alert(
'
根节点不能编辑!
'
);
return
;
}
var
sLabel
=
window.prompt(
"
请
为当前的节点输入新的名称:
"
, oCurrentTextNode.getLabelEl().innerHTML);
var
rtn
=
CheckIsValid(sLabel);
if
(
!
rtn)
{
alert(
'
您输入的内容中含有非法字符,这里只允许输入字母或数字!
'
);
return
;
}
if
(sLabel
&&
sLabel.length
>
0
) {
var
nodeId
=
oCurrentTextNode.data.id;
var
res
=
AjaxForTree.EditTreeNode(nodeId,sLabel).value;
treeInit();
}
}
/*
Deletes the TextNode that was the target of the "contextmenu"
event that triggered the display of the ContextMenu instance.
*/
function
deleteNode() {
var
isTrue
=
window.confirm(
"
您
确认删除这个节点吗?
"
);
if
(isTrue)
{
if
(oCurrentTextNode.data.id
==
1
)
{
alert(
'
根节点不能删除!
'
);
return
;
}
var
nodeId
=
oCurrentTextNode.data.id;
var
res
=
AjaxForTree.DelTreeNode(nodeId).value;
treeInit();
}
}
/*
"contextmenu" event handler for the element(s) that
triggered the display of the ContextMenu instance - used
to set a reference to the TextNode instance that triggered
the display of the ContextMenu instance.
*/
function
onTriggerContextMenu(p_oEvent) {
function
getTextNodeFromEventTarget(p_oTarget) {
if
(p_oTarget.tagName.toUpperCase()
==
"
A
"
&&
p_oTarget.className
==
"
ygtvlabel
"
) {
return
oTextNodeMap[p_oTarget.id];
}
else
{
if
(p_oTarget.parentNode
&&
p_oTarget.parentNode.nodeType
==
1
) {
return
getTextNodeFromEventTarget(p_oTarget.parentNode);
}
}
}
var
oTextNode
=
getTextNodeFromEventTarget(
this
.contextEventTarget);
if
(oTextNode) {
oCurrentTextNode
=
oTextNode;
}
else
{
//
Cancel the display of the ContextMenu instance.
this
.cancel();
}
}
var
oContextMenu
=
new
YAHOO.widget.ContextMenu(
"
mytreecontextmenu
"
, {
trigger:
"
treeDiv1
"
,
lazyload:
true
,
itemdata: [
{ text:
"
增
加子节点
"
, onclick: { fn: addNode } },
{ text:
"
编
辑当前节点
"
, onclick: { fn: editNodeLabel } },
{ text:
"
删
除当前节点
"
, onclick: { fn: deleteNode } }
] });
oContextMenu.subscribe(
"
triggerContextMenu
"
, onTriggerContextMenu);
<
/
script>
分享到:
相关推荐
《深入理解YUI3:基于yui3-master.zip的探讨》 YUI(Yahoo! User Interface Library)是由雅虎公司开发的一套开源JavaScript库,它为Web开发者提供了丰富的功能和工具,以创建交互性强、性能优秀的网页应用。YUI3是...
通过查看提供的demo,开发者可以直观地了解如何在实际项目中应用YUI的Ajax功能,比如动态加载内容、无刷新更新页面等。 总之,YUI的Ajax框架为开发者提供了强大的工具,使他们能够轻松地构建动态、交互性强的Web...
5. **Ajax交互(Ajax Interactions)**:YUI-EXT集成了YUI的Ajax功能,允许在不刷新页面的情况下与服务器进行异步通信。这使得用户界面能够实时更新,提高了用户体验。 6. **工具提示(Tooltips)**:YUI-EXT还提供...
::设置你的JS和CSS根目录,脚本会自动按树层次查找和压缩所有的JS和CSS SET JSFOLDER=D:\1 echo 正在查找 JavaScript, CSS ... chdir /d %JSFOLDER% for /r . %%a in (*.js *.css) do ( @echo 正在压缩 %%~a .....
- **Ajax通信**:YUI的Ajax组件支持异步与服务器进行数据交换,实现无刷新页面更新。 **2. YUI的可扩展性** YUI的设计非常注重模块化和可扩展性,开发者可以通过编写新的模块来扩展其功能。YUI的模块化结构使得代码...
《深入理解YUI 3.9.0 r2:界面设计与资源优化》 YUI,全称为Yahoo! User Interface Library,是由雅虎公司开发的一个开源JavaScript库,它旨在简化Web应用程序的构建,特别是对于界面设计和交互效果的实现。在3.9.0...
- **Ajax(Asynchronous JavaScript and XML)**:支持异步数据交换,与服务器进行无刷新通信。 - **IO(Input/Output)**:提供HTTP请求功能,支持GET和POST等HTTP方法,用于与服务器进行数据交互。 - **数据...
《深入理解YUI:基于“yui.rar 例子”的解析》 YUI,全称Yahoo! User Interface Library,是雅虎公司推出的一款开源JavaScript库,旨在帮助开发者构建高性能、易于维护的网页应用。本篇文章将结合“yui.rar 例子”...
1. DOM(Document Object Model):YUI的DOM模块提供了对HTML文档的高级操作,包括元素选择、属性修改、事件绑定等,简化了与DOM树的交互。 2. Event:事件处理是Web开发中的关键部分,YUI的Event模块提供了一套跨...
IO组件提供了一套完整的Ajax解决方案,能够与服务器进行异步数据交换,实现无刷新页面更新。 9. **JSON处理** JSON模块提供了JSON的解析和序列化功能,方便了数据的传输和存储。 10. **国际化与本地化** YUI的...
4. **Ajax支持**:YUI包含了Ajax组件,可以方便地进行异步数据交换,无需刷新整个页面就能更新部分内容,提升了用户体验。 5. **动画效果**:YUI的Animation模块提供了一系列方法来创建平滑的CSS属性变化动画,如...
《YUI使用文档》汉语版是一份详细的YUI学习材料,它涵盖了这个JavaScript库的核心功能和使用方法。YUI,全称Yahoo! User Interface Library,是Yahoo开发的一个开放源代码的JavaScript库,旨在帮助开发者创建交互式...
YUI的核心理念是模块化,允许开发者根据项目需求选择和组合不同的功能模块,以实现高效且轻量级的代码。 在"Yahoo YUI 插件库"中,我们通常会发现各种扩展和增强YUI核心功能的插件。这些插件可能涵盖以下方面: 1....
《yuicompressor-2.4.8.jar:前端优化与代码压缩的艺术》 在Web开发领域,优化前端性能是一项至关重要的任务,而yuicompressor-2.4.8.jar正是这样一款强大的工具,专为JavaScript代码压缩而设计,助力开发者实现...
1. **YUI库**:了解YUI的基本结构、模块化设计和如何引入到项目中,是使用YUI表单验证器的前提。 2. **表单验证**:表单验证的常见规则包括非空检查、长度限制、格式验证(如邮箱、电话号码等)和自定义验证函数。 3...
YUI(Yahoo! User Interface Library)是雅虎公司推出的一款开源JavaScript库,旨在帮助开发者构建高性能、可扩展的Web应用程序。YUI3.6版本是该库的一个重要里程碑,提供了丰富的组件和工具,以支持现代Web开发的...
YUI Test is a complete testing framework for JavaScript and Web applications. You can use the simple JavaScript syntax to write unit tests that can be run in web browsers or on the command line, as ...
《深入理解Yahoo UI Library(YUI)3.8.1版本》 Yahoo UI Library(简称YUI)是一款开源的JavaScript库,由Yahoo公司开发并维护,旨在帮助开发者构建高性能、可扩展的Web应用程序。YUI 3.8.1是其发展过程中的一个...
7. **AJAX**:YUI的AJAX组件支持异步数据交换,使得网页可以在不刷新的情况下更新内容。 8. **动画效果**:YUI的Anim模块可以创建复杂的动画效果,增强了用户体验。 **YUI的示例** 压缩包中的示例文件展示了如何...
Ajax,全称Asynchronous JavaScript and XML,是一种在无需刷新整个页面的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使得网页实现异步更新,提升了用户体验。YUI(Yahoo! User ...