TL; DR - 有没有办法在jsTree节点中拥有工作链接,而不使用JS重定向?
我想在jsTree节点中添加按钮,如下所示:
我使用了这段代码:
$('#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;
我的问题是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标记可以重新组织。
答案 0 :(得分:5)
你也可以试试这个:
$('#tree').on('ready.jstree', function () {
$('#tree').off("click.jstree", ".jstree-anchor");
})
答案 1 :(得分:0)
看看here
根据需要修改此插件,然后将其包含在您的页面和plugins
配置数组中。
您甚至可以修改它以包含锚点内的按钮(此示例将它们包含在列表元素中),只需确保包含有效元素(例如,使用SPAN
或I
)。