[目录](index.md)

1. [基本用法](1.usage.md)
2. [选项](2.options.md)
3. **界面操控**
4. [参与贡献](4.contribution.md)

jsMind 对象
===

jsMind 提供了对思维导图进行操控的一系列 API,这些 API 都是基于 `jsMind` 对象处理的,一般情况下可以使用下面的代码获取 jsMind 对象:

```javascript
/*
方法1:
    创建思维导图时即可获得 jsMind 对象
*/
var jm = new jsMind(options);

/*
方法2:
    当前页面已存在一个思维导图时可直接获得此 jsMind 对象
    当在一个页面里创建了多个 jsMind 时,此方法获得的是最后创建的那个对象
*/
var jm = jsMind.current;
```

3.1. 显示思维导图
===

使用 `jm.show(mind)` 方法即可显示思维导图了,具体的用法请参见 [1.1. 基本框架](1.usage.md)

3.2. 查找节点
===

**获取根节点** : 使用 `jm.get_root()` 即可获取当前思维导图的根节点。

**根据 id 查找节点** : 使用 `jm.get_node(nodeid)` 方法即可根据 id 查找当前思维导图中指定的节点,如果查找不到则返回 `null`。

**获取选中的节点** : 使用 `jm.get_selected_node()` 方法即可获取当前选中的节点,如果没有选中的节点则返回 `null`。

**查找相邻的节点** : 使用 `jm.find_node_before(node|nodeid)` 和 `find_node_after(node|nodeid)` 即可获取指定的节点的上一个或下一个节点,如果没有上一个或下一个,则返回 `null`。

**获取父节点** : 使用 `node.parent` 即可获取父节点,根节点的父节点为 `null`。

**获取子节点集合** : 使用 `node.children` 即可获取子节点的集合。

Tips
---

思维导图是由多个节点和节点之间的连线组成的,一个思维导图有一个根节点,根节点外围可以有多个子节点,子节点还可以有多个子节点。每个节点包含以下的多个属性:

```javascript
node {
    id,        //  : string                    节点id
    index,     //  : integer                   节点序号
    topic,     //  : string                    节点主题
    isroot,    //  : boolean                   指示该节点是否为根节点
    parent,    //  : node                      该节点的父节点,根节点的父节目为 null ,但请不要根据此属性判断该节点是否为根节点
    direction, //  : enum(left,center,right)   该节点的分布位置
    children,  //  : array of node             该节点的子节点组合
    expanded,  //  : boolean                   该节点的下级节点是否展开
    data,      //  : object{string,object}     该节点的其它附加数据
}
```

3.3. 操作节点
===

**选中节点** : 使用 `jm.select_node(node) 方法选中指定的节点。

**收起子节点** : 使用 `jm.collapse_node(node|nodeid)` 方法可收起该节点的子节点。

**展开子节点** : 使用 `jm.expand_node(node|nodeid)` 方法可展开该节点的子节点。

**收起或展开子节点** : 使用 `jm.toggle_node(node|nodeid)` 方法可自动展开或收起子节点。

**展开全部子节点** : 使用 `jm.expand_all()` 方法可展开全部子节点。

**展开至层级** : 使用 `jm.expand_to_depth(depth)` 方法可展开到指定层级。

**移动节点** : 使用 `jm.move_node(node|nodeid,beforeid)` 方法可将该节点移动到 beforeid 节点之前,可将 beforeid 设为 `_first_`或`_last`可将该节点移动到相邻节点的最前或最后。 

**启用编辑** : 使用 `jm.enable_edit()` 方法可启用对当前思维导图的编辑功能。

**禁止编辑** : 使用 `jm.disable_edit()` 方法可禁止对当前思维导图进行编辑。

**编辑节点** : 使用 `jm.begin_edit(node|nodeid)` 方法可以将该节点调整为编辑状态。

**停止编辑** : 使用 `jm.end_edit()` 方法可以将该节点调整为只读状态。

3.4. 编辑节点
===

**添加节点** : 使用 `jm.add_node(parent_node, nodeid, topic, data)` 方法可添加一个节点。

**在指定位置前插入节点** : 使用 `jm.insert_node_before(node_before, nodeid, topic, data)` 方法可在 node_before 节点前插入节点。

**在指定位置后插入节点** : 使用 `jm.insert_node_after(node_after, nodeid, topic, data)` 方法可在 node_after 节点后插入节点。

**删除节点** : 使用 `jm.remove_node(node|nodeid)` 方法可删除指定的节点及其所有的子节点。

**更新节点** : 使用 `jm.update_node(nodeid, topic)` 方法可更新指定节点的 topic,其它属性由于不在界面上显示,可以直接修改对应 node 的属性。

3.5. 设置样式
===

**设置主题** : 使用 `jm.set_theme(theme)` 方法可设置当前思维导图的主题。

**设置背景色/前景色** : 使用 `jm.set_node_color(nodeid, bgcolor, fgcolor)` 方法可设置指定节点的背景色与前景色。

**设置字体** : 使用 `jm.set_node_font_style(nodeid, size, weight, style)` 方法可设置指定节点的字体。

**设置背景图片** : 使用 `jm.set_node_background_image(nodeid, image, width, height)` 方法可设置指定节点的背景图片。

3.6. 获取数据
===

**获取元数据** : 使用 `jm.get_meta()` 方法可获取当前思维导图的元数据。

**获取数据** : 使用 `jm.get_data(data_format)` 方法可获取当前思维导图的指定格式的数据文本。

3.7. 其它操作
===

**清除节点的选中** : 使用 `jm.select_clear()` 方法可以清除当前的选中状态。

**判断节点是否可见** : 使用 `jm.is_node_visible(node)` 方法可以判断此节点是否显示。

版权声明
===

禁止转载、禁止演绎。

jsMind 项目仍在不断升级变化,版本更新时会同时更新对应的文档。为避免给使用者带来困惑,在没有得到书面许可前,禁止转载本文档,同时禁止对本文档进行任何形式的更改。