我正在努力创建公司结构。
一名员工可以在两个部门工作,但这是具有相同ID id = employee1
的同一员工。
检查是否已选择或取消选择项目,这是有效的。
我遇到了具有相同ID的节点的问题。
当选择id为employee1的节点时,我想选择/取消选择所有节点,其中id为employee1。
提前谢谢。
<div id="companyEmplyee">
<ul>
<li class="folder" id="company1">Company
<ul>
<li class="folder" id="sector1">Sector 1
<ul>
<li class="emplyee1">Emplyee 1</li>
<li id="emplyee2">Emplyee 2</li>
</ul>
</li>
<li class="folder" id="sector2">Sector 2
<ul>
<li class="emplyee1">Emplyee 1</li>
<li id="emplyee35">Emplyee 35</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<script type="text/javascript">
$(function () {
var tree = $("#companyEmplyee").fancytree({
checkbox: true,
selectMode: 2,
keyPathSeparator: "/",
clones: {
highlightClones: true
},
select: function (event, data) {
var s = data.tree.getNodeByKey(data.node.key);
var s3 = s.key;
var s2 = $.map(data.tree.getSelectedNodes(), function (node) {//
return node.key;
});
if ($.inArray(s3, s2) == -1) {//
$("tr#" + s3).addClass("deleted");
//DESELECTED
$('table#tblID tr#' + s.key).remove();
alert(s.key + ' DESELECT');
}
else {
//SELECTED
alert(s.key + ' SELECT');
}
}
});
});
</script>
答案 0 :(得分:2)
id
在同一文档中应该是唯一的,而是使用通用类emplyee1
:
<div id="companyEmplyee">
<ul>
<li class="folder" id="company1">Company
<ul>
<li class="folder" id="sector1">Sector 1
<ul>
<li class="emplyee1">Emplyee 1</li>
<li id="emplyee2">Emplyee 2</li>
</ul>
</li>
<li class="folder" id="sector2">Sector 2
<ul>
<li class="emplyee1">Emplyee 1</li>
<li id="emplyee35">Emplyee 35</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
或者使用唯一ID,就像您在 fancytree documentation 中看到的那样,键(节点ID)应该是唯一的:
节点ID(在树内必须是唯一的)
更新:
尝试使用以下hack:
select: function (event, data) {
if(data.node.extraClasses!=''){
if( $(data.node.li).find('.fancytree-node').hasClass('fancytree-selected') )
$('.'+data.node.extraClasses).addClass('fancytree-selected');
else
$('.'+data.node.extraClasses).removeClass('fancytree-selected');
}
}
<强> Working example 强>
希望这会有所帮助。
答案 1 :(得分:1)
重复的ID在HTML中无效,违反规范并导致问题。
https://www.w3.org/TR/2011/WD-html5-20110525/elements.html#the-id-attribute
分配类而不是ID。
答案 2 :(得分:1)
如前面的答案所述,Fancytree中不允许使用重复的节点密钥(HTML中也不允许使用重复的ID)。
由于在一棵树中有多个对象实例是一种常见的场景,因此有一个“克隆”的概念。
基本上,您包含clones
扩展名,并将员工ID传递为refKey
而不是key
,例如
<li data-refKey="emplyee1">Emplyee 1</li>
您还需要启用扩展程序:
$("#tree").fancytree({
extensions: ["clones"],
checkbox: true,
selectMode: 2,
...
之后,您可以访问相关的实例,如下所示:
select: function(event, data) {
var nodes = data.node.getCloneList();
...
},
详情请见此处:https://github.com/mar10/fancytree/wiki/ExtClones 和示例http://wwwendt.de/tech/fancytree/demo/sample-ext-clones.html