使用 HTML 数据填充结构树

基本用法

jsTree 可以将标准的无序列表转换为结构树。最低标准只要求一个 <ul> 节点并在其中包含几个只有简单文本的 <li> 节点。

另外你还要有一个用来封装 <ul> 的容器,我们会在该容器上创建实例。比如:$('#html1').jstree();

<div id="html1">
  <ul>
    <li>Root node 1</li>
    <li>Root node 2</li>
  </ul>
</div>
basic markup example

子节点

若需要创建子节点,只要简单地在 <li> 节点中再嵌套一个 <ul> 即可。

jsTree 会在内部把节点中的文本转换成链接,而节点内容已经是一个链接的,则不做额外处理。比如下面例子中的 Child node 2

另外,jsTree 中单击链接是不跳转到 href 所指定的地址的。如果你想要实现点击跳转,你需要监听 changed.jstree 事件,在事件回调中执行跳转。

更多内容请参阅我们文档中的事件章节。

<div id="html1">
  <ul>
    <li>Root node 1
      <ul>
        <li>Child node 1</li>
        <li><a href="#">Child node 2</a></li>
      </ul>
    </li>
  </ul>
</div>
nodes with children example

class 方式设置初始状态

可以通过在 <a> 元素中添加一个 jstree-clicked class 从而让节点默认以 selected 状态进行初始化。

同样地,在 <li> 元素中加入 jstree-open class 则是让节点默认为展开状态,这样其子节点在初始化时便是可见状态。

最好为每个节点赋予其唯一 id(在 <li> 元素中添加 id 属性),这样,你在与后端交互时就很有用了,因为触发的任何 jsTree 事件都能拿到其节点 ID 了。

…
<li class="jstree-open" id="node_1">Root
  <ul>
    <li>
      <a href="#" class="jstree-clicked">Child</a>
    </li>
  </ul>
</li>
…
setting initial state with classes example

data 属性方式设置初始状态

你也可以通过 data-jstree 属性设置一个节点的初始状态。

以下的任意组合都是可用的:openedselecteddisabledicon

节点 icon 若设为一个文件地址(只要字符串中含有 /)则能够将对应的图片作为节点的图标。而使用一个纯字符串的话,节点 icon 则会把它转为 <i> 元素的 class。

举个例子,如果你的框架使用的是 Twitter Bootstrap,那使用 "icon" : "glyphicon glyphicon-leaf" 的话就会显示叶子作为图标。

<li data-jstree='{"opened":true,"selected":true}'>Root
  <ul>
    <li data-jstree='{"disabled":true}'>Child</li>
    <li data-jstree='{"icon":"//jstree.com/tree.png"}'>Child</li>
    <li data-jstree='{"icon":"glyphicon glyphicon-leaf"}'>Child</li>
  </ul>
</li>
Setting initial state with data attribute example

使用 AJAX 加载数据

你也可以使用 AJAX 将服务端返回的 HTML 数据填充到结构树中。响应的数据格式要和前述的保持一致,唯一不同的是数据来自服务端,它不是固定在页面上。

进一步说明一下,该功能需要用到 $.jstree.defaults.core.data 配置项。

只需使用一个标准的 jQuery 风格的 AJAX 配置,jsTree 就能自动进行 AJAX 请求并把响应内容填充到结构树。

在返回的数据中你需要给每一个 LI 节点加上 jstree-closed class,而且其中不要再嵌套 UL 节点,否则 jsTree 会在用户打开该节点时立即再进行一次 AJAX 请求。

除了标准的 jQuery ajax 选项之外,在这里你还可以为 dataurl 提供函数。这些函数将在当前实例的作用域中运行,其中会传递一个参数,该参数指示正在加载的那个节点。最后,函数的返回值则分别作为 URL 和 data 的最终配置值。

$('#tree').jstree({
  'core' : {
    'data' : {
      'url' : 'ajax_nodes.html',
      'data' : function (node) {
        return { 'id' : node.id };
      }
    }
  }
});

// Example response:
<ul>
<li>Node 1</li>
<li class="jstree-closed">Node 2</li>
</ul>