跳到正文

树

可展开的层级列表:文件目录、组织架构、分类。写一个嵌套的 <ul>,库渲染成带展开箭头的行;可选复选框(父级根据子级显示全选、半选、未选)、单选高亮和完整的键盘操作。

带行为 分包 modular/tree 3 个事件 3 个方法

示例

  • src
    • index.js
    • style.css
    • locked.txt
  • docs
    • readme.md

在线试用 Markdown 版

代码

<div class="zh-tree" data-zh-tree data-checkable aria-label="文件" style="max-width:20rem">
  <ul>
    <li data-id="src" data-open data-icon="file-text">src
      <ul>
        <li data-id="a" data-checked>index.js</li>
        <li data-id="b">style.css</li>
        <li data-id="c" data-disabled>locked.txt</li>
      </ul>
    </li>
    <li data-id="docs" data-icon="file-text">docs
      <ul><li data-id="d">readme.md</li></ul>
    </li>
  </ul>
</div>

只用核心包(modular/core)时,还要加 modular/tree.min.js 和 modular/tree.min.css;全量版已包含。见 按需引入。

属性

属性用在取值说明
data-zh-tree<div class="zh-tree">里面放一个嵌套的 <ul>声明为树;<li> 的文字是节点名称,子级写在它里面的 <ul> 里
data-id<li>唯一标识事件和方法里用它指代节点;不写会自动生成
data-icon<li>图标名节点前的图标
data-open<li>该节点默认展开
data-checked<li>默认选中(仅复选模式;父级的状态由子级算出)
data-disabled<li>禁用,不可选择、不可勾选
data-checkable容器显示复选框
data-no-select容器不要点击高亮(只做展开或勾选时用)
data-toggle-on-click容器点击整行也展开或收起,不只是点箭头
zh-tree--guides容器(class)显示缩进参考线

事件

事件触发于detail说明
zh:tree-select容器undefined点击或回车选中某个节点
zh:tree-check容器undefined勾选变化;ids 是当前全部选中的叶子节点的 data-id
zh:tree-toggle容器undefined展开或收起

方法

  • ZhaoUI.tree.checked(el):返回选中的叶子节点 id 数组
  • ZhaoUI.tree.expandAll(el) / collapseAll(el):全部展开 / 收起
  • ZhaoUI.tree.select(el, id):选中某个节点并展开它的祖先;找不到返回 false

样式类

zh-tree zh-tree-row zh-tree-toggle zh-tree-check zh-tree-icon zh-tree-label zh-tree--guides

无障碍

  • 容器 role=tree,行 role=treeitem,带 aria-level、aria-expanded、aria-checked、aria-selected
  • 键盘:上下键移动,右键展开或进入子级,左键收起或回到父级,Home/End 到首尾,回车选中,空格勾选(无复选框时选中)
  • 勾选结果通过隐藏的 aria-live 区域读出
  • 请给容器加 aria-label 说明这棵树是什么
  • 不含拖拽排序、行内重命名和按需加载子节点;这些需要你自己处理数据后重新渲染

常见问题

树是什么?

可展开的层级列表:文件目录、组织架构、分类。写一个嵌套的 <ul>,库渲染成带展开箭头的行;可选复选框(父级根据子级显示全选、半选、未选)、单选高亮和完整的键盘操作。

怎么使用树?

先在页面里引入 zhaoui.css 和 zhaoui.js(放在 </body> 前,不加 defer),再照本页「用法」里的标记书写;需要用代码控制时,用「方法」里列出的接口。

树有哪些事件?

zh:tree-select(点击或回车选中某个节点);zh:tree-check(勾选变化;ids 是当前全部选中的叶子节点的 data-id);zh:tree-toggle(展开或收起)。

树有哪些方法?

ZhaoUI.tree.checked(el):返回选中的叶子节点 id 数组;ZhaoUI.tree.expandAll(el) / collapseAll(el):全部展开 / 收起;ZhaoUI.tree.select(el, id):选中某个节点并展开它的祖先;找不到返回 false。

树支持键盘和读屏吗?

容器 role=tree,行 role=treeitem,带 aria-level、aria-expanded、aria-checked、aria-selected;键盘:上下键移动,右键展开或进入子级,左键收起或回到父级,Home/End 到首尾,回车选中,空格勾选(无复选框时选中);勾选结果通过隐藏的 aria-live 区域读出。

树需要依赖框架吗?

不需要。ZhaoUI 是原生 HTML、CSS 和 JavaScript,不依赖 jQuery、Vue 或 React。