节点内的可点击按钮

时间:2014-06-16 09:05:04

标签: javascript jquery html5 jstree

TL; DR - 有没有办法在jsTree节点中拥有工作链接,而不使用JS重定向?


我想在jsTree节点中添加按钮,如下所示:

enter image description here

我使用了这段代码:



$('#tree').jstree({
    'core': {
        'multiple': false,
        'themes': {
            'responsive': false
        }
    }
});

/* custom */
body {
    font: 14px/14px "Lucida Sans Unicode", "Lucida Grande", sans-serif normal;
}
.actions a {
    background: #333;
    color: #ccc;
    font-size: 11px;
    line-height: 18px;
    border-radius: 4px;
    padding: 0 5px;
    text-decoration: none;
}
.actions a:hover {
    background: #999;
}

<link href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.0.9/themes/default/style.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/jstree/3.0.1/jstree.min.js"></script>
<div id="tree">
    <ul>
        <li>
            <span class="content">Folder</span>
            <ul>
                <li>
                    <span class="content">Subfolder</span>
                    <ul>
                        <li>
                            <span class="content">File</span>
                            <span class="actions">
                                <a href="/open">open</a>
                                <a href="/delete">delete</a>
                            </span>
                        </li>
                    </ul>
                </li>
            </ul>
        </li>
    </ul>
</div>
&#13;
&#13;
&#13;

我的问题是jsTree在每个节点上创建<a>标签(出于语义目的)并拦截每个click事件。我自己的锚点应该打开一个新页面,但现在没有任何反应。

作者建议听取changed.jstree事件,并自己完成工作:

$('#tree').on('changed.jstree', function (e, data) {
    document.location = data.instance.get_node(data.selected[0], true).a_attr.href;
}).jstree();

如果我想使用JS重定向,这个解决方案是完全可以接受的。但我不是 目前,我编辑了jsTree源代码以避免事件拦截(you can have a look on this rejected PR),但是就像作者提到的那样,这不是一个好方法。所以这是我的最后一个问题:

有没有办法在jsTree节点中拥有工作链接,而不使用JS重定向?

我对任何建议持开放态度,我仍然可以用来捕获/触发事件,我的HTML标记可以重新组织。

2 个答案:

答案 0 :(得分:5)

你也可以试试这个:

$('#tree').on('ready.jstree', function () {
  $('#tree').off("click.jstree", ".jstree-anchor");
})

答案 1 :(得分:0)

看看here 根据需要修改此插件,然后将其包含在您的页面和plugins配置数组中。 您甚至可以修改它以包含锚点内的按钮(此示例将它们包含在列表元素中),只需确保包含有效元素(例如,使用SPANI)。