【treeview】

效果图:

  前几天想把后台的目录结构通过树形插件的方法反映到前端来,在网上搜了半天只找到了这个treeview,虽然不是很好看,不过还是够用的。。用treeview的前提是要有jquery.treeview.js、jquery.treeview.css以及一些静态文件。这些可以通过网上去下载jquery-treeview这个包,解压缩后放到我们自己的项目下合适的目录即可。要注意必须把整个目录都拷贝过去,因为里面还有很多treeview要用的静态图片等等。然后在我们的HTML页面上分别引用上面说的两个文件。

  另外注意treeview需要jQuery的支持,所以别忘了在用<script>标签引用jquery.treeview.js之前先引用jquery.js

  之后我们就可以进行静态的treeview插件的编写,基本的HTML结构如下所示:

<ul class="filetree" id="treeTest">
<li><span class="folder">一级目录</span>
<ul>
<li><span class="file">一级目录下文件</span></li>
<li><span class="folder">二级目录</span>
<ul>
<li><span class="file">二级目录下文件</span></li>
</ul>
</li>
<li><span class="folder">第二个二级目录</span>
</li>
</ul>
</li>
</ul> <script>
$("ul#treeTest").treeview();
</script>

  几个class基本上是treeview文件定义的,最外面的ul的id是我自己定义的,因为光写完html界面之后还没有完成必须在js中手动调用一下treeview方法以初始化整个文件树。另外这里引用jquery和treeview的几个文件的部分都没有写出。

  做出来的效果图是这样的:

  treeview插件说这么多也就差不多了,其实困难的是如何把一个目录转化成上面那样的html结构。我自己用python写的一个小方法结合Jinja2的模板语言,把一个目录名直接转化成上面那样的HTML结构,供参考。

Python函数(将一个目录名对应的目录转化为一个序列化JSON格式的数据):

def dir_to_json(root):
simple_root = root.rsplit(os.sep,1)[1]
if not os.path.isdir(root):
raise Exception('%s is not a directory' % root)
res = {simple_root:[]}
for sub in lis(root):
sub = sub.decode('gbk')
if os.path.isfile(join(root,sub)):
res.get(simple_root).append(sub)
elif os.path.isdir(join(root,sub)):
res.get(simple_root).append(dir_to_json(join(root,sub))) return res

  简单说明下产出物的结构,从根目录开始是一个字典结构,其中key是目录名,value是一个列表。列表中是直属于该目录的文件名。当直属于该目录的子目录存在时,子目录又是一个字典结构。就这样的一个嵌套结构。然后把这样一种结构的JSON数据传递给JINJA2模板:

    {% macro render(root) %}
{% for rootname,subitems in root.iteritems() %}
<li><span class="folder">{{ rootname }}</span>
<ul>
{% for subitem in subitems %}
{% if not subitem is string %}
{{ render(subitem) }}
{% else %}
<li><span class="file">{{ subitem }}</span></li>
{% endif %}
{% endfor %}
</ul>
</li>
{% endfor %}
{% endmacro %}
<ul class="filetree" id="packInfo">
{{ render(packInfo) }}
</ul>

  用递归的方法来生成文件树即可。这样生成的文件树有一个缺点,就是所有目录都是打开状态的。。如果嵌套目录很多层的话会有点难看。可以通过加载时执行一些JS来修复

  *一个小坑

  上面这个macro,最好不要放在block里面,虽说macro和block是互相独立的,但是这个macro涉及到了递归,可能jinja2机制上有什么缺陷。总之我把这个macro放在content -> page_content这两重block下面之后老是报错找不到render方法。。放到contentblock外面就恢复正常了

【treeview】 基于jQuery的简单树形插件的更多相关文章

  1. 一个基于jQuery的简单树形菜单

    在工作中的项目使用的是一个前端基于 jQuery easyui 的一个系统,其中左侧的主菜单使用的是 easyui 中的 tree 组件,不是太熟悉,不过感觉不是太好用. 比如 easyui 中的 t ...

  2. 出位的template.js 基于jquery的模板渲染插件

    找了好几款基于jquery的模板渲染插件,无一感觉很难用(教程较少.绑定不统一),也可能我智商问题,比如jquery template.js .jtemplate.js. 然后在github上找到这一 ...

  3. 基于jQuery的数字键盘插件

    有时,我们需要在网页上使用软键盘.今天,就给大家带来一个基于jQuery的数字键盘插件,除了jQuery,不需要依赖任何文件资源.纯数字键盘,有退格,有清除,不支持输入小数(需要的可以自己改一下,主要 ...

  4. 一款基于jQuery的QQ表情插件

    我们在QQ聊天或者发表评论.微博时,会有一个允许加入表情的功能,点击表情按钮,会弹出一系列表情小图片,选中某个表情图片即可发表的丰富的含表情的内容.今天和大家分享一款基于jQuery的QQ表情插件,您 ...

  5. 10 个基于 jQuery 的 Web 交互插件推荐

    英文原文:10 jQuery for Web Interaction Plugins “用户交互”在现代的 Web 设计中占据了很大比例,这是互联网产品不可或缺的关键,对 Web 设计师也提出了更高的 ...

  6. 源码来袭!!!基于jquery的ajax分页插件(demo+源码)

    前几天打开自己的博客园主页,无意间发现自己的园龄竟然有4年之久了.可是看自己的博客列表却是空空如也,其实之前也有写过,但是一直没发布(然而好像并没有什么卵用).刚开始学习编程时就接触到博客园,且在博客 ...

  7. 基于jquery的城市选择插件

    城市选择插件的难度不是很大,主要是对dom节点的操作.而我写的这个插件相对功能比较简答,没有加入省市联动. 上代码好了,参照代码的注释应该比较好理解. /* *基于jquery的城市选择插件 *aut ...

  8. 基于jQuery全屏相册插件zoomVisualizer

    基于jQuery全屏相册插件zoomVisualizer.这是一款基于jquery ui实现的相册插件,支持隐藏显示相册缩略图,支持左右箭头切换图片,支持放大缩及缩小图片.效果图如下: 在线预览    ...

  9. 基于jQuery的Cookie操作插件--简单而又没有兼容性问题!

    在网页客户端,我们经常会遇到读取或者设置cookie的情况,如果用纯生的js我们可能会遇到一些兼容性带来的麻烦,这里给大家介绍一个比较实用jquery操作cookie的插件,插件的源代码如下: 1 2 ...

随机推荐

  1. FusionCharts ID重复

    1.今天在做项目时,有关FusionCharts柱状图的,调试的过程中,我发现IE浏览器出现FusionCharts ID重复. 具体的消息如下: 消息:#25081843:IECompatibili ...

  2. linux内核移植X86平台的例子

    bootloader支持启动多个Linux 内核安装(X86平台) 1. cparch/x86/boot/bzImage /boot/vmlinuz-$version 2. cp $initrd /b ...

  3. CAN控制器-配置过滤器

    首先简单介绍一下CAN总线,关于CAN总线是谁发明的,CAN总线的历史,CAN总线的发展,CAN总线的应用场合,这些,通通不说.这里只是以我个人理解,简单说说CAN通信.CAN总线的端点没有地址(除非 ...

  4. freemarker中的if...elseif...else语句

    freemarker中的if...elseif...else语句 1.设计示例 <#if student.studentAge lt 12> ${student.studentName}不 ...

  5. eclipse和android studio的爱恨情仇

    Eclipse,以下简称ES(自己起的,不喜勿喷):Android studio,以下简称AS(都这么叫的啦)! 2000年,IBM怀胎24个月,终于产生了Eclipse,当时ES的诞生只是为了解决I ...

  6. xml的SAX解析规则

    一,为什么要用它 1.1,讲解 DOM解析原理:一次性把xml文档加载进内存,然后在内存中构建Document树. 对内存要求比较要. 缺点: 不适合读取大容量的xml文件,容易导致内存溢出. SAX ...

  7. HALCON学习-下载、安装

    下载地址: 官网 HALCON学习网 安装: 直接安装文件halcon-12.0-windows-x86.exe 破解,汉化: 在HALCON学习网中有Licence文件“license_suppor ...

  8. HALCON学习-资料

    HALCON学习网: http://www.ihalcon.com/ 学习资料推荐博客: http://k594081130.blog.163.com/blog/static/218359013201 ...

  9. LinearRegression 线性回归

    一.预测 先来看看这样一个场景: 假如你手头有一套房子要出售,你咨询了房产中介.中介跟你要了一系列的数据,例如房子面积.位置.楼层.年限等,然后进行一系列计算后,给出了建议的定价. 房产中介是如何帮你 ...

  10. Eclipse常用不常用快捷键

    逼格高且常用的7个快捷键:Ctrl+O:列出该类下的所有方法   Ctrl+E:列出打开的所有类   Shift+Enter:在当前行下一行创建空白行(Ctrl+Shift+Enter:在当前行上一行 ...