最近在做一个类似课件的东西,要用到dtree生成章节目录,dtree是一个开源的框架,下载地址是:http://www.destroydrop.com/javascripts/tree/。
dtree的使用参照上面网站的例子就可以了,通过调用add方法和传递相应的参数来控制目录的外观等。
但是在我使用的过程中遇到了这样一个问题:在点击一个节点的时候要调用一个定位函数。
这个定位函数的作用是在一个div标签中,显示出用户看到的当前页面所属的章节信息:
就是点击位置1,然后在2处会显示位置
最开始的方案:在首页:index.html 中写入如下定位函数:
<script type="text/javascript">
/* 获取当前位置的函数*/
function ok(address1,address2)
{
var currentdiv=document.getElementById("currentdiv");
currentdiv.innerHTML=address1+">>"+address2;
}
</script>
以及相应的div:
<div style="float:left;">您当前的位置:</div>
<div id="currentdiv" style="float:left;">交互空间>>课件词典</div>
并且利用dtree.js生成一颗目录树:
<div class='dtree'>
<script type='text/javascript'>
d = new dTree('d');
d.add(0,-1,'课程目录');
d.add(498,0,'第一讲 编年体');
d.add(3179,498,'本讲导学 ','kcxxContent_4458_1.html','本讲导学 ','secnavframe');
d.add(3180,498,'典籍概述','kcxxContent_3843_1.html','典籍概述','secnavframe');
d.add(3181,498,'史料选讲','kcxxContent_3846_1.html','史料选讲','secnavframe');
d.add(3899,498,'课后练习','kcxxContent_4048_1.html','课后练习','secnavframe');
d.add(499,0,'第二讲 国别体');
d.add(3182,499,'本讲导学 ','kcxxContent_4459_1.html','本讲导学 ','secnavframe');
d.add(3183,499,'典籍概述','kcxxContent_4049_1.html','典籍概述','secnavframe');
d.add(3184,499,'史料选讲','kcxxContent_4295_1.html','史料选讲','secnavframe');
d.add(3900,499,'课后练习','kcxxContent_4456_1.html','课后练习','secnavframe');
d.add(500,0,'第三讲 纪传体');
d.add(3185,500,'本讲导学','kcxxContent_4460_1.html','本讲导学','secnavframe');
d.add(3186,500,'典籍概述','kcxxContent_4058_1.html','典籍概述','secnavframe');
d.add(3187,500,'史料选讲','kcxxContent_4368_1.html','史料选讲','secnavframe');
d.add(3907,500,'课后练习','kcxxContent_4125_1.html','课后练习','secnavframe');
document.write(d);
</script>
最开始觉得应该可以自己再多定义一个参数,比如:
d.add(3912,505,'课后练习','kcxxContent_4457_1.html','课后练习','secnavframe','ok('1','2')');
但是,由于我是初学者,云山雾绕的引号觉得很麻烦,于是就放弃了……
之后就各种百度,谷歌,发现了一个可行的方案~~
mytree.add(1,0,'My Pictures','javascript:alert(\'dddddddd\'););
就是在上面参数中url位置上,把网页地址换成javascript:alert(\'dddd\'),真的可以做到点击树状目录的时候,有反应,弹出提示框,但是在改进的时候发现这种方法不可行的理由:
1.只能写在这个固定的地方,不能函数调用
2.点击触发事件的同时我还想打开页面……
也许是自己才疏学浅,所以又放弃了~~~
--------------------------------------------------------------------------------------------
纠结了好久,最后终于成功了
方法就是:修改dtree.js文件!
把函数直接写在dtree.js文件里,不用调用
在.js文件中有一个函数名字是 s 他的作用是在点击叶子节点的时候使之高亮,我们在这里面添加相应的代码,就能实现点击如上图“本讲导学”的时候,同时触发修改定位和转移页面。而定位函数就是写在了下述代码的后两行。
// 点击节点的时候,更改css样式,使选中节点高亮,同时可以在此处编写点击目录节点时想要触发的函数
dTree.prototype.s = function(id)
{
// 判断是否允许选中节点
if (!this.config.useSelection) return;
// 根据索引值从节点数组中取出节点对象
var cn = this.aNodes[id];
var parent = this.aNodes[id].pid;
var pName;
for(var i=0;i<this.aNodes.length;i++)
{
if(this.aNodes[i].id == parent)
{
pName = this.aNodes[i].name;
}
}
// 判断包含子节点的节点是否允许选中
if (cn._hc && !this.config.folderLinks) return;
// 交换新旧节点的选中状态,改变css
if (this.selectedNode != id)
{
if (this.selectedNode || this.selectedNode==0)
{
eOld = document.getElementById("s" + this.obj + this.selectedNode);
eOld.className = "node";
}
eNew = document.getElementById("s" + this.obj + id);
eNew.className = "nodeSel";
this.selectedNode = id;
if (this.config.useCookies) this.setCookie('cs' + this.obj, cn.id);
var currentdiv=document.getElementById("currentdiv");
currentdiv.innerHTML = "课程学习>>"+pName+">>"+this.aNodes[id].name;
}
};
-------------------------------------------------------------------------------------------
在.js文件中有一个函数名字是 nodeStatus ,他的作用是改变有子节点的节点的展开或者折叠状态,所以在这里我们可以定义在点击二级节点时的动作~~这样就解决了我的问题~~
/**
* 改变节点的状态(展开或折叠)
* @param status true展开,false折叠;
* @param id 节点的数组索引值(_ai);
* @param bottom 是否是本级最后一个节点(_ls);
* 可以在这个地方编写点击二节目录的函数
*/
dTree.prototype.nodeStatus = function(status, id, bottom)
{
eDiv= document.getElementById('d' + this.obj + id);
eJoin = document.getElementById('j' + this.obj + id);
if (this.config.useIcons) {
eIcon = document.getElementById('i' + this.obj + id);
eIcon.src = (status) ? this.aNodes[id].iconOpen : this.aNodes[id].icon;
}
eJoin.src = (this.config.useLines)?
((status)?((bottom)?this.icon.minusBottom:this.icon.minus):((bottom)?this.icon.plusBottom:this.icon.plus)):
((status)?this.icon.nlMinus:this.icon.nlPlus);
eDiv.style.display = (status) ? 'block': 'none';
};
------------------------------------------------------------------------------------------
在这里,也遇到了乱码问题,比如在s函数中的定位函数部分:
var currentdiv=document.getElementById("currentdiv");
currentdiv.innerHTML = "课程学习>>"+pName+">>"+this.aNodes[id].name;
在前台显示的时候,“课程学习”是乱码
其实是因为首页index.html是gb2312编码,而我们从网上下载下来的dtree.js是utf-8编码,所以只要在dreamweaver中改变dtree.js页面的编码格式就行啦~~
修改——页面属性——把编码改成gb2312
-----------------------------------over--------------------------------------------------------
- 大小: 51.8 KB
分享到:
相关推荐
通过以上介绍,我们可以看到【带节点点击事件的DTree】是一个强大且灵活的前端组件,它结合了树形结构、事件处理和动态数据加载等多种功能,为开发人员提供了构建交互式界面的有效工具。在实际项目中,开发者可以...
- **事件处理**:提供丰富的事件接口,如点击复选框时触发的事件,便于开发者进行业务逻辑处理。 - **视觉反馈**:提供良好的视觉反馈,用户可以通过复选框的状态直观了解当前选择。 **3. 实现与应用** 在实际使用...
在实现上,开发者需要监听鼠标右键点击事件,然后动态生成并显示菜单,同时处理各种菜单项的点击事件。 最后是复选框dtree,它是针对dtree的一种扩展,允许用户多选节点。在实际应用中,这在需要用户选择多个选项的...
本资源提供了dtree库所需的两个关键文件:`dtree.css`和`dtree.js`,以及相关的图标和API文档,帮助开发者更便捷地在项目中集成和使用dtree。 `dtree.css`是CSS样式表文件,它包含了dtree控件的样式定义。这些样式...
layui dtree是一款基于layui框架的树形插件,它提供了丰富的功能和良好的用户体验,尤其适用于在Web应用中展示层级关系的数据。在这个场景中,我们看到的"layui dtree树形结构"指的是在用户点击一个文本框时,会弹出...
本项目着重介绍了如何在dtree中集成右键弹出事件,以便在用户点击右键时显示自定义的上下文菜单。 首先,我们需要理解右键事件。在Web页面中,当用户在元素上按下鼠标右键时,会触发`contextmenu`事件。开发者可以...
`dtree` 是一种常用于创建可交互的树形结构组件,它允许用户通过单选按钮(radiobox)和复选框(checkbox)进行选择。本文将深入探讨如何使用 `dtree` 来读取这些选择的值,以及如何根据需求进行定制。 首先,`...
4. **事件处理**:添加点击、展开/折叠、拖放等交互功能,需要监听并处理相关的用户事件。 5. **API设计**:提供增删改查等操作接口,使得外部可以方便地对dtree进行操作。 简单应用dtree时,可以按照以下方式操作...
3. **事件监听**:为树形节点添加点击事件监听,以便在用户点击时执行相应的操作。 接下来,添加右键菜单功能,关键在于以下几点: 1. **监听鼠标右键点击**:通过JavaScript的`addEventListener`函数监听`...
这个主题主要涵盖了两种技术:决策树(dtree)和鼠标的右键事件处理。 决策树(dtree)是数据挖掘和机器学习中常用的一种算法,用于分类和回归问题。它通过构建一种树形结构来表示各种可能的决定路径和相应的结果。...
2. **事件委托**:为了提高性能,可以使用事件委托,将事件监听器添加到dtree容器上,而不是每个节点,通过事件对象判断触发事件的节点,然后更新对应的`checkbox`状态。 3. **递归处理**:在处理子节点选中状态时,...
如果你没有源码编辑权限,也可以尝试在使用dtree时,通过事件监听和阻止默认行为的方式来实现不选中子节点的需求。 总的来说,解决"dtree不选中子节点处理"的问题需要深入理解dtree的内部机制,尤其是节点选中逻辑...
dtree.rar dtree.rar dtree.rar dtree.rar dtree.rar dtree.rar dtree.rar dtree.rar dtree.rar dtree.rar dtree.rar dtree.rar dtree.rar dtree.rar dtree.rar dtree.rar dtree.rar dtree.rar dtree.rar dtree.rar
dTree的分析和二次开发(上)dTree的分析和二次开发dTree的分析和二次开发dTree的分析和二次开发
`dtree`提供了丰富的API来处理用户的点击事件和其他交互行为。例如,监听节点点击事件: ```javascript dTree.addEventListener('click', function(node) { console.log('点击了节点:' + node.text); // 这里...
- 事件监听是关键,如`onClick`事件处理节点的点击行为,`onDblClick`处理双击事件,`onExpand`和`onCollapse`监听节点的展开和折叠。 6. **实际应用场景** - 文件管理系统:显示目录结构,允许用户浏览、添加、...
例如,在一个文件管理系统中,用户可以通过dtree.js来浏览多级目录,通过点击节点实现目录的展开和折叠,而dtree.css则确保了视觉上的整洁和一致性。此外,由于它们都是轻量级的库,因此不会对页面加载速度造成太大...
在提供的压缩包中,`tree.txt`可能包含了示例数据或配置信息,`jquery-treeview`、`dtree`和`xtree`目录则分别包含了对应插件的源码、文档和示例。为了使用这些插件,你需要了解每个插件的API和配置选项,结合`tree....
4. **绑定事件**:如果需要,可以监听并处理Dtree提供的各种事件,如点击事件、展开/折叠事件等。 **Dtree的优化与注意事项:** 1. **性能优化**:由于JavaScript运行在客户端,大数据量的处理可能会影响性能。应尽...
DTree的特性包括但不限于:支持无限层级节点、节点可以动态添加、支持节点的异步加载、节点可以展开或折叠、支持节点选择事件、支持节点点击事件等。DTree的使用通常涉及到对HTML页面的DOM操作,通过引入DTree的...