=ZTree v3.x (JQuery Tree插件) 更新日志=

<font color="red">为了更好的优化及扩展zTree, 因此决定升级为v3.x，并且对之前的v2.x不兼容，会有很多结构上的修改，对此深感无奈与抱歉，请大家谅解。</font>
<font color="red">

具体修改内容可参考：

   * [http://www.treejs.cn/v3/api.php zTree v3.x API 文档]

   * [http://www.treejs.cn/v3/demo.php#_101 zTree v3.x Demo 演示]

   * [http://www.treejs.cn/v3/faq.php#_101 zTree v3.x 常见问题]

</font>

*2018.12.10* v3.5.38
   * [修改] data.nodeChecked & data.isHidden 的 返回值规范为 boolean   Thanks @xinhochen

*2018.12.10* v3.5.37
   * [修改] fuzzySearch.js & Demo   Thanks @SadWood & @JerryWang24

*2018.08.21* v3.5.37
   * [修改] 替换 scrollIntoViewIfNeeded 方法    Thanks @jocki84
   * [修改] 部分 API 文字错误

*2018.06.26* v3.5.36
   * [增加] setting.async.headers & setting.async.xhrFields

*2018.04.24* v3.5.35
   * [增加] Demo：模糊搜索（Fuzzy Search）  Thanks @bigablecat

*2018.03.30* v3.5.35
   * [修改] 关闭拖拽方法内的 eventMouseDown.preventDefault(); 避免影响 zTree 外部的事件  Thanks @heyusysu

*2018.02.12* v3.5.34
   * [修改] nodeChecked 方法内的错误  Thanks @勇哥

*2018.01.30* v3.5.33
   * [修改] nodeIsParent 方法内的错误  Thanks @netmou

*2018.01.06* v3.5.32
   * [修改] setting.async.autoParam / otherParam 支持 function
   * [修改] isParent / isHidden 允许自定义属性名称 setting.data.key.isParent / isHidden

*2017.12.28* v3.5.31
   * [修改] 初始化节点数据的规则，支持 treeNode { name: "Node2", children: []}, 情况下自动设置为 isParent = true

*2017.11.11* v3.5.30
   * [修改] scrollIntoViewIfNeeded 方法对 IE7 的兼容

*2017.06.23* v3.5.29
   * [修改] 拖拽操作后 body.css("cursor", "auto"); 修改为 body.css("cursor", "");（感谢 Jim）

*2017.06.19* v3.5.29
   * [增加] reAsyncChildNodesPromise(parentNode, reloadType, isSilent) 方法支持 ES6 Promise
   * [修改] reAsyncChildNodes 方法增加 callback 参数

*2017.01.20* v3.5.28
   * [修改] scrollIntoViewIfNeeded 方法对 IE8 的兼容

*2016.12.27* v3.5.27
   * [修改] addNodes 方法设置 index 参数后，导致 treeNode.isLastNode 错误

*2016.11.03* v3.5.26
   * [修改] 使用 scrollIntoViewIfNeeded 替代 scrollIntoView，兼容各种浏览器

*2016.09.27* v3.5.25
   * [修改] ajax 异步加载支持 contentType = 'application/json'

*2016.06.06* v3.5.24
   * [修改] selectNode 方法中 某些情况下，isSilent 参数无效
   * [修改] 数据中 id = 'length'时， 导致 transformTozTreeFormat() 方法异常

*2016.04.08* v3.5.23
   * [修改] expandCollapseNode 方法被 gulp 压缩后，在 IE8 上会导致溢出

*2016.04.06* v3.5.23
   * [修改] 替换 arguments.callee 避免 'use strict' 严格模式下报错

*2016.04.01* v3.5.23
   * [修改] selectNode 方法 增加 isSilent 参数，可以禁止 选中节点时，自动滚动到视图
   
*2016.03.01* v3.5.22
   * [修改] metro Demo 的样式错误
   * [修改] 增加 <a> 的 padding 后， 导致 setting.edit.drag.inner 无效

*2016.02.17* v3.5.21
   * [修改] zTree js 文件名 （为了便于发布到 https://cdnjs.com/）

*2016.01.20* v3.5.20
   * [修改] checkAllNodes() 方法不处理 (chkDisabled = true) 的父节点的子节点的 bug

*2015.12.04* v3.5.19.3
   * [修改] 为避免定位节点时抢焦点， 使用 scrollIntoView 方法替换之前的 focus 方法（对于IE6等旧浏览器仍然使用 focus方法）

*2015.11.15* v3.5.19.2
   * [增加] 给节点名称的 span 标签增加 class，便于用户设置 css

*2015.10.26* v3.5.19.1
   * [修改] addNodes 新方法 导致 拖拽节点时报错
   * [增加] treeNode.getIndex 方法，可以快速获取 节点在 子节点中的位置
   * [增加] treeNode.getPath 方法，可以快速获取 节点的所有父节点

*2015.10.22* v3.5.19
   * [修改] addNodes 方法支持直接添加新节点到任意位置 addNodes(parentNode, index, newNodes, isSilent)
   * [修改] selectstart 事件未解绑导致的内存泄漏

*2015.08.26* v3.5.18
   * [修改] onSelected/onUnSelected 回调参数，由 (event, treeId, node) 修改为 （treeId, node）；另外 删除 已选择的节点时，也会触发 onUnSelected 回调
   * [增加] Allow nodes to specify their own icon using an 'icon' property of the 'setting.data.key'
   * [增加] metro 风格 demo
   * [增加] awesome 风格 demo
   * [增加] 回调 onSelected / onUnSelected

*2015.02.15* v3.5.17
   * [修改] excheck 扩展中 removeClass 与 jQueryUI 1.9 冲突的问题，目前放弃 removeClass 方法
   * [修改] 优化 exhide 扩展包初始化效率，避免数据多时 ie8 假死的 bug（感谢：https://github.com/sarxos）
   * [修改] 若干 Demo & API 的小错误
   * [修改] 异步加载 低版本 IE 缓存严重的问题
   * [修改] 在 onRename 回调中使用 updateNode 方法无效的问题

*2014.03.09* v3.5.16
   * [增加] onDragMove 回调，便于控制 zTree 节点与其他 DOM 的拖拽操作。（感谢 yumi301）
   * [增加] 针对 Mac 系统 Cmd 键的支持， Cmd 键 + 左键 也可以多选节点

   * [修改] 使用 destory 方法销毁树以后，依然可以从 getZTreeObj 方法中获取到 zTree 对象的 bug。
   * [修改] onCheck 回调的 event，恢复为 zTree 自身的 event 事件，同时利用 srcEvent 传递原始 event 对象。（感谢 yumi301）
   * [修改] 拖拽多个节点时，超出 maxShowNodeNum 设置个数的节点会失去 被选择状态的 bug
   * [修改] excheck & exedit 扩展包的 zTree 方法中 setting 数据错误导致 checkNode、updateNode 等方法操作 radio 失效的 bug
   * [修改] 不加载 exedit 扩展包时，使用 removeNode 方法无法触发 beforeRemove 和 onRemove 回调的 bug

*2013.10.19* v3.5.15
   * [增加] setting.view.txtSelectedEnable 属性，满足部分项目中客户对于可以选择节点文本信息的强烈欲望。

   * [修改]  exhide 扩展包导致操作子节点后 isLastNode 属性异常 的bug
   * [修改]  使用 cancelEditName 方法时，beforeRename & onRename 的 isCancel 始终为 false 的bug
   * [修改]  编辑状态， beforeRename 回调 return false 时，提示信息导致 input 失去焦点后， 当树再次得到焦点时，让 input 自动获取焦点
   * [修改]  判断拖拽到节点的 <a> 标签中自定义的无 id 组件判断错误的bug
   * [修改]  async_edit.html demo 中 添加按钮 显示的 bug
   * [修改]  当没有开启异步加载模式下，对于没有子节点的父节点，即使设置 open=true 在初始化时也不会设置为展开状态的bug （对于异步加载模式下依然会强行设置为折叠状态）

*2013.06.28* v3.5.14
   * [修改]  拖拽节点时 iframe 遮罩异常的bug
   * [修改]  清空子节点后重新添加子节点无法显示的bug

*2013.06.02* v3.5.13

   * [增加] beforeRename & onRename 增加 isCancel 参数，可以监控用户 ESC 取消编辑的事件

   * [修改] 初始化时 radioType="all", 父节点未展开 且 子节点有被勾选，点击其他 radio 时，不会取消勾选该子节点的bug
   * [修改] 多棵树拖拽时，拖拽无效后会导致目标书已选择的节点清空的 bug。
   * [修改] 多棵树拖拽时，会触发 addHoverDom 的bug。
   * [修改] 多棵树拖拽时，由于 beforeDrog 或 prev / inner / next 返回 false 后未触发原始节点的 addHoverDom 的bug
   * [修改] 异步加载时，对于未加载子节点的父节点使用 expandNode 方法时， sonSign 设置为 true后，导致异步加载的节点无法正常显示的bug
   * [修改] 一次性加载全部数据，如果父节点 A 未展开，但下一级的父节点 A1 设置了 open=true 的时候，使用 expandAll 方法导致 A1 的下一级父节点出现重复的 bug
   * [修改] 增加对 iframe 的支持，可以只在主页面加载 zTree 的 js，在 iframe 内创建树 [https://github.com/zTree/zTree_v3/issues/7 Issue Info]
   * [修改] 引入 exhide 扩展包 导致页面上同时加载多棵树时，根节点 的 连接线图标出现异常 的 bug [http://tieba.baidu.com/p/2277416574]
   * [修改] excheck & exedit 扩展包中事件代理获取节点 tId 的方法，保证适当修改 DOM 结构也能得到 tId

*2013.03.11* v3.5.12
   * [修改] 由于 jquery 1.9 中移除 event.srcElement 导致的 js 报错的bug。
   * [修改] 在异步加载模式下，使用 moveNode 方法，且 moveType != "inner" 时，也会导致 targetNode 自动加载子节点的 bug
   * [修改] 对已经显示的节点(nocheck=true)使用 showNodes 或 showNode 方法后，导致勾选框出现的bug。
   * [修改] 对已经隐藏的节点(nocheck=false)使用 hideNodes 或 hideNode 方法后，导致勾选框消失的bug。
   * [修改] getNodesByParamFuzzy 支持 大小写模糊。
   * [修改] className 结构，提取 _consts.className.BUTTON / LEVEL / ICO_LOADING / SWITCH，便于快速修改 css 冲突。
     例如：与 WordPress 产生冲突后，直接修改 core 中的 "button" 和 "level" 即可。  Issue: https://github.com/zTree/zTree_v3/issues/2

*2013.01.28* v3.5.02
   * [增加] setting.check.chkDisabledInherit 属性，用于设置 chkDisabled 在初始化时子节点是否可以继承父节点的 chkDisabled 属性
   * [删除] 内部 noSel 方法，使用 selectstart事件 和 "-moz-user-select"样式 处理禁止 节点文字被选择的功能
   * [修改] 不兼容 jQuery 1.9 的bug
   * [修改] onDrop 的触发规则，保证异步加载模式下，可以在延迟加载结束后触发，避免 onDrop 中被拖拽的节点是已经更新后的数据。
   * [修改] setChkDisabled 方法，增加 inheritParent, inheritChildren 参数设置是否让父子节点继承 disabled
   * [修改] 异步加载时 拼接参数的方法，由 string 修改为 json 对象
   * [修正] 1-2-3 3级节点时，如果 2级节点 全部设置为 nocheck 或 chkDisabled后，勾选3级节点时，1级节点的半勾选状态错误的 bug
   * [修改] Demo: checkbox_nocheck.html & checkbox_chkDisabled.html;
   * [修改] Demo: edit_super.html，增加 showRenameBtn & showRemoveBtn 的演示
   * [修改] Demo: asyncForAll, 将 post 修改为 get；为了避免由于 IE10 的 bug 造成的客户端 以及 服务端崩溃
      IE10 ajax Post 无法提交参数的bug (http://bugs.jquery.com/ticket/12790)

*2012.12.21* v3.5.01
   * [优化] clone 方法
   * [修正] 对于初始化无 children 属性的父节点进行 reAsyncChildNodes 操作时出错的 bug
   * [修正] beforeRename 回调中使用 cancelEditName 方法后，再 return false 导致无法重新进行编辑的 bug
   * [修正] exedit 扩展包让 setting.data.key.url 失效的 bug
   * [修正] setting.check.autoCheckTrigger 设置为 true 时，onCheck 回调缺少 event 参数的 bug
   * [修正] singlepath.html Demo 中的 bug

*2012.11.20* v3.5
   * [优化] 原先的 clone 方法 （特别感谢：愚人码头）
   * [修改] 隐藏父节点后，使用 expandAll 方法导致 父节点展开的 bug
   * [修改] 使用 jQuery v1.7 以上时，设置 zTree 容器 ul 隐藏（visibility: hidden;）后， 调用 selectNode 导致 IE 浏览器报错 Can't move focus 的 bug
   * [修改] 正在异步加载时，执行 destory 或 init 方法后，异步加载的节点影响新树的 bug
   * [修改] 方法 reAsyncChildNodes 在 refresh 的时候未清空内部 cache 导致内存泄露 的 bug
   * [修改] 批量节点拖拽到其他父节点内（inner）时，导致顺序反转 的 bug
   * [修改] 对于 使用 html格式的 节点无法触发 双击事件 的 bug
   * [修改] onCheck 回调中的 event ，保证与触发事件中的 event 一致
   * [修改] 异步加载时，在 onNodeCreated 中执行 selectNode 后，导致节点折叠的 bug
   * [修改] API 中 dataFilter 的参数名称 childNodes ->  responseData
   * [修改] API 中 iconSkin 的 举例内容
   * [修改] API 中 chkDisabled 的说明
   * [修改] Demo 中 index.html 内的 loadReady 重复绑定问题

*2012.09.03* v3.4
   * [增加]  Demo —— OutLook 样式的左侧菜单
   * [增加] 清空 zTree 的方法 $.fn.zTree.destory(treeId) & zTree.destory()

   * [修改] core核心文件内 _eventProxy 方法中获取 tId 的方法，提高 DOM 的灵活性
   * [修改] 初始化时 多层父节点的 checkbox 半选状态计算错误的 bug
   * [修改] 同时选中父、子节点后，利用 getSelectedNodes 获取选中节点并利用 removeNode 删除时报错的 bug
   * [修改] treeNode.chkDisabled / nocheck 属性，支持字符串格式的 "false"/"true"
   * [修改] 异步加载模式下无法利用 server 返回 xml 并且 在 dataFilter 中继续处理的 bug
   * [修改] title 只允许设置为 string 类型值的问题。 修正后允许设置为 number 类型的值
   * [修改] zId 计数规则 & Cache 保存，减少 IE9 的 bug 造成的内存泄漏
   * [修改] API 页面搜索功能导致 IE 崩溃的 bug

*2012.07.16* v3.3
   * [增加] 扩展库 exhide -- 节点隐藏功能

   * [修改] getNodesByFilter 方法，添加 invokeParam 自定义参数
   * [修改] 拖拽中测试代码未删除，导致出现黄颜色的 iframe 遮罩层的 bug
   * [修改] 延迟加载方法 对于使用 expandAll 进行全部展开时，导致 onNodeCreated 回调 和 addDiyDom 方法触发过早的 bug
   * [修改] 使用 moveNode 移动尚未生成 DOM 的节点时，视图会出现异常的 bug
   * [修改] 删除节点后，相关节点的 isFirstNode 属性未重置的 bug
   * [修改] getPreNode(),getNextNode() 方法在对于特殊情况时计算错误的 bug
   * [修改] 设置 title 之后，如果重新将 title 内容设置为空后，会导致无法更新 title 的 bug
   * [修改] 针对 setting.check.chkStyle=="radio" && setting.check.radioType=="all" 的情况时，getTreeCheckedNodes方法优化，找到一个结果就 break
   * [修改] zTreeObj.getCheckedNodes(false) 在 radioType = "all" 时计算错误的 bug
   * [修改] 完善 API 中 beforeDrop / onDrop 的关于 treeId 的说明

*2012.05.13* v3.2
   * [增加] setting.data.key.url 允许修改 treeNode.url 属性
   * [增加] getNodesByFilter(filter, isSingle) 方法
   * [增加] "与其他 DOM 拖拽互动" 的 Demo (http://www.treejs.cn/v3/demo.php#_511)
   * [增加] "异步加载模式下全部展开" 的 Demo (http://www.treejs.cn/v3/demo.php#_512)

   * [修改] 代码结构，将 addNodes、removeNode、removeChildNodes 方法 和 beforeRemove、onRemove 回调 转移到 core 内
   * [修改] IE7的环境下无子节点的父节点反复展开出现多余空行的 bug
   * [修改] 异步加载时，如果出现网络异常等，会导致 图标显示错误的 bug
   * [修改] dataFilter中 return null 导致异常 的 bug
   * [修改] removeChildNodes 方法清空子节点后，无法正常添加节点的 bug
   * [修改] moveNode 后节点中的自定义元素的事件丢失的 bug
   * [修改] moveNode 方法中设置 isSilent = true 时，如果移动到已展开的 父节点后，出现异常的 bug
   * [修改] onClick/onDrag/onDrop 回调中 event 不是原始 event 的 bug
   * [修改] onDrop 回调中 当拖拽无效时，无法获得 treeNodes 的 bug
   * [修改] onDrop 无法判断拖拽是 移动还是复制的问题
   * [修改] 未开启异步加载模式时，拖拽节点到子节点为空的父节点内时 出现异常 的 bug
   * [修改] 拖拽过程中，反复在 父节点图标上划动时，会出现停顿的 bug
            (需要css 结构—— button -> span.button)

   * [修改] 拖拽操作时箭头 与 targetNode 背景之间的细节现实问题，便于用户拖拽时更容易区分 prev、next 和 inner 操作
   * [修改] 拖拽操作时IE6/7 下 在 节点<a> 右侧 10px 内会导致 targetNode = root 的 bug
   * [修改] 编辑模式下 默认的编辑按钮、删除按钮点击后，如果相应的 before 回调 return false 时会触发 onClick 回调的 bug

*2012.02.14* v3.1
   * [增加] ajax 的参数 setting.async.contentType ，让提交参数适用于 json 数据提交 （主要适用于 .Net 的开发）。
   * [增加] setting.edit.editNameSelectAll, 用于设定编辑节点名称时初次显示 input 后 text 内容为全选
   * [修改] 异步加载 规则，不再仅仅依靠父节点的子节点数来判定，增加内部属性 zAsync，保证默认状态下父节点及时无子节点也只能异步加载一次，除非使用 reAsyncChildNodes 方法强行控制异步加载。
   * [修改] 放大浏览器后导致 界面出现多余连接线的bug （需要更新：icon 图标和 css ）
   * [修改] 在编辑状态，如果节点名超过编辑框宽度，左右键在框内不起作用的bug（IE 6 7 8 出现）
      CSS 中 filter:alpha(opacity=80) 造成的，应该是 ie 的 bug，需要更新 css 文件
   * [修改] title 设置后，如果属性不存在，则默认为 title 为空，便于数据容错和用户灵活使用
   * [修改] editName 方法如果针对尚未展开的 父节点，会导致该父节点自动展开的 bug
   * [修改] title 中存在标签时导致 title 显示异常的bug（例如：蓝色字22%"'`<input/>`）

*2012.01.10* v3.0
   * [增加] setting.check.autoCheckTrigger 默认值 false，可以设置联动选中时是否触发事件回调函数
   * [增加] setting.callback.beforeEditName 回调函数，以保证用户可以捕获点击编辑按钮的事件
   * [增加] treeNode.chkDisabled 属性，显示 checkbox 但是用户无法修改 checkbox 状态，并且该 checkbox 会影响父节点的 checkbox 的半选状态
   * [增加] setting.check.nocheckInherit 属性，用户设置子节点继承 nocheck 属性，用于批量初始化节点，不适用于已经显示的节点
   * [增加] setting.edit.drag.autoExpandTrigger 默认值 false，可以设置自动展开、折叠操作时是否触发事件回调函数
   * [增加] setting.view.nameIsHTML 默认值 false，允许用户对 name 设置 DOM 对象
   * [增加] treeNode.click 属性的说明文档
   * [增加] treeObj.setChkDisabled 方法用于设置 checkbox / radio disabled 状态
   * [增加] treeNode.halfCheck 属性，用于强制设定节点的半选状态

   * [修改] 异步加载 & 编辑功能 共存时，拖拽节点 或 增加节点 导致 ie 上报错的 bug （apply 方法引起）
   * [修改] zTreeStyle 样式冲突
   * [修改] setting.data.key.title 默认值设置为 ""，初始化时自动赋值为 setting.data.key.name 这样可避免希望 title 与 name 一致的用户反复设置参数
   * [修改] 点击叶子节点的连接线会触发 expand 事件的 bug
   * [修改] IE 下 点击叶子节点连线会出现虚线框的 bug
   * [修改] updateNode 导致 checkbox 半选状态错误的 bug
   * [修改] checkNode 方法实现 toggle 操作, 取消 expandAll 方法的 toggle 操作
   * [修改] zTree 内鼠标移动会抢页面上 input 内的焦点的 bug
   * [修改] beforeRename / onRename 的触发方式——即使名称内容未改变也会触发，便于用户配合 beforeEditName 捕获编辑状态的结束，赋予用户更多调整规则的权利
   * [修改] 与 easyUI 共存时无法拖拽的bug
   * [修改] beforeRename 在 Firefox 下如果利用 alert，会触发两次的 bug
   * [修改] checkNode/expandNode/removeNode 方法，默认不触发回调函数，恢复 v2.6 的默认状态，同时增加 callbackFlag 参数，设置为 true 时，可以触发回调函数
   * [修改] IE9下“根据参数查找节点”的Demo 报错：行14 重新声明常量属性(Demo 自身的问题，定义了history变量)
   * [修改] 初始化 zTree 时 onNodeCreated 事件回调函数中无法 用 getZTreeObj 获取 zTree 对象的 bug
   * [修改] setting.edit.drag.prev / next / inner 参数，增加被拖拽的节点集合
   * [修改] 异步加载模式下，otherParam 使用Array数组会出错的 bug。例如： ["id", "1", "name", "test"]
   * [修改] FireFox 下多棵树拖拽异常的 bug
   * [修改] exedit 中调用 excheck库的方法时没有进行容错处理，导致如果只加入 exedit 而没有 excheck的时候，会出现 js 错误
   * [修改] 显示 checkbox 的 zTree 在编辑模式下，移动节点不会更新父节点半选状态的 bug
   * [修改] treeNode.childs --> children; treeObject.removeChilds --> removeChildNodes; setting.data.key.childs --> children（英文不好惹的祸！抱歉了！）
   * [修改] onRemove 回调中得到的 treeNode 还可以查找 preNode、nextNode 的bug。 修正后，getPreNode 和 getNextNode 都返回 null； 为了便于查找父节点，getParentNode 仍保留
   * [修改] 简单数据模式下，如果 id 与 pId 的值相同会导致该节点无法正常加载的 bug
   * [修改] 移动或删除中间节点会导致最后一个节点连接线图标变小的 bug

*2011.09.05* v3.0 beta
   * [修改] zTree 的 js 代码架构全面修改，并且拆分
   * [修改] zTree 的 css 样式全面修改，对浏览器可以更好地兼容，同时解决了以前1个像素差的问题
   * [优化] 采用延迟加载技术，一次性加载大数据量的节点性能飞速提升
   * [增加] 支持多节点同时选中、拖拽
   * [增加] checkNode、checkAllNodes 等多种方法
   * [增加] IE6 自动取消动画展开、折叠的功能
   * [修正] 异步加载 & 编辑模式 能够更完美的共存
   * [修正] setting 配置更加合理，并且增加了若干项配置参数
   * [修正] treeNode 节点数据的属性更加合理，并且增加了一些方法
   * [修正] 拖拽操作更加灵活方便，更容易制定自己的规则
   * [修正] 其他若干修改，详细对比请参考 url：[http://www.treejs.cn/v3/faq.php#_101 zTree v3.0 常见问题]
