前端开发树形插件带来的烦恼(一)

前端开发树形插件带来的烦恼(一)

前端开发中,有些项目中会用到树形插件,其数据结构也比较简单,大体如下:

 1 TreeRoot
 2
 3   |-- tree01  id = 01  pid = 0
 4     |-- leaf01  id = 04  pid = 01
 5     |-- leaf02  id = 05  pid = 01
 6     |-- leaf03  id = 06  pid = 01
 7     ......
 8   |-- tree02  id = 02  pid = 0
 9     |-- leaf04  id = 07  pid = 02
10     ......
11   |-- tree03  id = 03  pid = 0
12     |-- leaf05  id = 08  pid = 03
13     ......
14   ......

数据结构说明:

  每一行代表一个数据,该数据由基本信息,id,pid三个部分构成。pid为连接的父节点,额外增加的内容也包括两个部分;

  ①缩进;②节点展开提示,如+ - 符号,> < 符号等,方式众多,不是重点,不继续说了。

树形结构展示说明:

  树形结构的展示方式主要还是通过遍历和递归,渲染方式可以一次性将数组组装好整体展示,或者一层层展示,也可以考虑一共展示几层(递归次数)

烦恼不在于此,烦恼是来自于业务的。我举例两个树形结构,暂命名为树形结构A和树形结构B,描述如下: 1 树形结构A 2

 3 科:大猫科          id = 1  pid = 0   
 5   属:虎          id = 2  pid = 1
 7     种:01华南虎     id = 3  pid = 2
 8       02孟加拉虎    id = 4  pid = 2
 9       03东北虎     id = 5  pid = 2
10
11  - - - - -- - - - - - - - - - - -
12 树形结构B13
14 键盘:键盘实例        id = 1  pid = 0
16   按键:Q键        id = 2  pid = 1
18     :W键        id = 3  pid = 1  
19     :E键        id = 4  pid = 1

在以上两个例子中,假设我需要在每个节点(包括根节点)上做个复选框,然后拿到所选择的 id,之后根据已选择的id进行操作。

这里对于节点是否已选,我见到的操作方式是不同的。如:

01、选择根节点,子节点跟随显示选择;

02、选择根节点,子节点不跟随显示选择;

03、选择所有子节点,根节点跟随显示选择;

04、选择部分子节点,根节点跟随显示选择;

05、选择部分子节点,根节点跟随显示半选择;

05、选择部分子节点,根节点跟随显示不选择;

  首先以01、03、04这种策略对上述两种AB树结构进行分析

    对A进行假设,已选择 01华南虎,此时 属:虎 对应跟随显示选择,

    因为 下只有这么一个 ,所以 科:大猫 必定跟随显示选择;

    至此,对树形结构A选择的 id列表为 [ 1,2 ,3 ];

      此时我可以说:“华南虎是虎,华南虎是大猫”,这两种描述都并没有任何错误。

      ——即符合事实,也符合选择复选策略出现的id列表

    对B进行假设,已选择 Q键 ,此时键盘实例跟随显示选择;

    至此,对树形结构B选择的 id列表为[ 1, 2 ];

      此时我说:“我按Q键,键盘灯点亮的是Q键”,就是错的,因为我按Q键,选择的是Q;

      但是实际选择的是Q和整个键盘,所以点亮的键盘灯也是整个键盘的,

      这个看似很简单的问题源于树形结构中的选择附带的 id 跟随选择策略的不同;

  同理,假设我以01、03、05这种策略对以上两种AB树结构进行分析,一样会得出矛盾的结论,还是上例:

    对A结构描述:可以说:“华南虎是虎,但是虎不是华南虎,范围不同”,这句话是正确的,也符合逻辑

    对B结构描述:可以说:“我按Q键,并没有按全部的键盘按键,键盘灯点亮的只有Q键”

      以上两种说法都符合逻辑,也很正确,但是id如何选,假设去掉父 id,则一条符合半选描述,

      一条符合不选描述的内容,半选到底是选,还是不选;

      拿出来的数据结构是否有必要重新列一张列表出来,很是矛盾,即使是使用01、03、06,依然也会产生困惑。

    这两个例子还算好,还有更恶心的例子:

      假设父节点是空的内容,比如某页PPT,有文字A,文字B,图形C,图形D,其中AB编组为X,CD编组为Y,XY编组为Z;

      这个树形结构的父节点是架空的,内容完全由最基层的子节点来构成的情况下,

      我选择A的时候,必定跟随选择AB形成的组X,必定跟随选择X所属的编组XY构成的Z;

      试问,此时我要对A沿虚线剪下,剪下的是谁,如果不拆分组,剪掉的是Z,

      实际上是ABCD,如果拆分组,那破坏了本身的树形结构;

      若此时我选择Z,然后对Z沿虚线剪下,剪下的应该是整个组,但是这个组之间可能会有间距,有重叠,

      并没有分开树形结构,实际上选择的是Z,但是获取的id并非是ABCD的id,也不是XY的id,只获取了Z的id;

      这种选择了父节点而子节点并未实际跟随选择的情况如何计算呢?

    所以,树形结构的复选策略,实际上是复杂的,在给用户的设计中,是必定要有跟随选择的;

    至少带有全选,反选,子节点全选父节点跟随全选,子节点未全选父节点要么半选,要么不选这种跟随性操作;

    十几种一种策略不够用,上述描述的策略也只是适用于某种情况而已;

    如果树形结构编组的是3D模型组?2D图层组?真实分类的子分类?策略不能一蹴而就的;

    既然已经使用了树结构,而且又要必须使用多选,那么树形结构就必须分开策略,分别创建,复用性就大大降低;

    而已经做好的很多树形结构的插件大神们,有考虑以上这些问题,提供出不同复选策略的方案么?

后续会慢慢更新这个问题,有一些尚未全部完成的解决思路,有空就更一下!

以上!?(?≧?≦)人(≧?≦?)?

原文地址:https://www.cnblogs.com/liuyuhangCastle/p/9551788.html

时间: 2024-08-24 23:55:35

前端开发树形插件带来的烦恼(一)的相关文章

Notepad++前端开发常用插件介绍

Notepad++前端开发常用插件介绍 Notepad++除了自身的功能强大之外,更是有许多非常的优秀的插件,下面就总结一下前端开发过程一些比较常用的插件. Emmet Emmet的前身是Zen Coding,一款使用仿CSS选择器的语法来快速开发HTML和CSS的插件,是前端开发神器.它无视了编辑器的自动提示和自动完成,秒杀了你自定义的各种快捷键或者 AHK 的热字符串,以智能简洁高效的缩短输入,带给你超快速地书写各种复杂而枯燥的 HTML 和 CSS 代码的体验.现在可以在Notepad++

CDN公共库、前端开发常用插件一览表(VendorPluginLib)

=======================================================================================前端CDN公共库====================================================================================== 为什么使用前端CDN公共库: 使用前端CDN增加网页的并行载入速度,减少本地服务器的负担,节省流量.我们把静态资源放到自己的服务器上面固

【分享】Web前端开发第三方插件大全

收集整理了一些Web前端开发比较成熟的第三方插件,分享给大家. ******************************************************************************* 一.国外插件 ace 版本:1.2.3au 官网:https://github.com/ajaxorg/ace-builds/ 许可:BSD 依赖:无 DataAPI:data-pulgin="ace" 功能:基于Web的代码编辑器,实现语法高亮功能 alertif

Web前端开发Chrome插件

参考:http://www.cnblogs.com/sosoft/p/3490481.html 越来越多的前端开发人员喜欢在Chrome里开发调试代码,Chrome有许多优秀的插件可以帮助前端开发人员极大的提高工作效率.尤其Chrome本身是可以登录的,登录后你所有的插件都会自动同步到每一个登录后的Chrome的,非常方便啊. Postman - REST Client Postman是Ajax开发的神器,对于Restful开发方式特别有帮助,可以用来模拟各种请求来测试API的正确性,比如用来模

项目前端开发常用插件汇总

树形结构展示 zTree 是一个依靠 jQuery 实现的多功能 "树插件".优异的性能.灵活的配置.多种功能的组合是 zTree 最大优点.专门适合项目开发,尤其是 树状菜单.树状数据的Web显示.权限管理等等. zTree 是开源免费的软件(MIT 许可证).在开源的作用下,zTree 越来越完善,目前已经拥有了不少粉丝,并且今后还会推出更多的 zTree 扩展功能库,让 zTree 更加强大. ZTree的特点: zTree v3.0 将核心代码按照功能进行了分割,不需要的代码可

前端开发常用插件总结

一.PC端 1.JQuery ( 1.7.0 ~ 3.1.o 版本 ) 官网:https://jquery.com/ JQuery是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+),jQuery2.0及后续版本将不再支持IE6/7/8浏览器. 强大的选择器 出色的DOM操作的封装 可靠的事件处理机制 完善的ajax 不污染顶级变量 出色的浏览器兼容性 链式操作方式 隐式迭代 行为层与结构层分离 丰富的插件支持

sublime text 3 前端开发常用插件

代码对齐: Alignment html代码补全:  Emmet CoffeeScript语法:  Better CoffeeScript css格式化:  CSS Format less语法:  LESS js代码格式化: JsFormat 代码注释文档:  DocBlockr 代码美化: HTML-CSS-JS Prettify 去除行尾空格:  TrailingSpaces 语法检测:  SublimeLinter, SublimeLinter-coffeelint, SublimeLin

前端开发推荐的火狐插件扩展

火狐好用的插件有很多,主要看你是做什么工作了,比如我是做网站前端的,有一些调试页面的插件就不可缺少了,如firebug.web developer等.秀一下我收藏的火狐插件,有些还是比较好用的,有一两个是必用的,之所以装的少,是因为怕装多了影响火狐运行速度.有图有真相:●.Firefox火狐常用附加组件集合(集荐:月光博客|360doc|) All-in-one sidebar:侧栏控制,率获大奖的用户体验! Firebug:为你的Firefox集成了浏览网页的同时随手可得的丰富开发工具. La

使用Emmet(前身Zen Coding)加速Web前端开发

这篇文章对Emmet使用说明比较详细,于是就收了~~~ 转载:Web前端开发-Web前端工程师 » 使用Emmet(前身Zen Coding)加速Web前端开发 Emmet插件以前被称作为Zen Coding,是一个文本编辑器的插件,它可以帮助您快速编写HTML和CSS代码,从而加速Web前端开发.早在2009年,Sergey Chikuyonok写过一篇文章,提出编写HTML和CSS的新方法.这一革命性的插件指的就是Zen Coding,经过很多开发者多年来的努力与帮助,现在已达到了一个新的水