Select/deselect fancytree 插件上具有相同 ID 的所有节点
Select/deselect all node with same ID on fancytree plugin
我正在尝试创建公司结构。
一名员工可以在两个部门任职,但这是具有相同 ID 的同一员工 id = employee1
。
正在检查项目是否被选中或取消选中,这正在运行。
我对具有相同 ID 的节点有疑问。
When selected node with id employee1, I want select/deselect all node where is 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>
id
在同一个文档中应该是唯一的,使用通用的 class 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)应该是唯一的:
Node id (must be unique inside the tree)
更新:
尝试使用以下技巧:
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');
}
}
希望这对您有所帮助。
重复的 ID 在 HTML 中无效,违反规范并导致问题。
https://www.w3.org/TR/2011/WD-html5-20110525/elements.html#the-id-attribute
分配 类 而不是 ids。
如之前的回答所述,Fancytree 中不允许重复的节点键(HTML 中也不允许重复的 ID)。
由于在一棵树中有多个对象实例是很常见的场景,所以有一个概念'clones'。
基本上,您包括 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
我正在尝试创建公司结构。
一名员工可以在两个部门任职,但这是具有相同 ID 的同一员工 id = employee1
。
正在检查项目是否被选中或取消选中,这正在运行。
我对具有相同 ID 的节点有疑问。
When selected node with id employee1, I want select/deselect all node where is 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>
id
在同一个文档中应该是唯一的,使用通用的 class 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)应该是唯一的:
Node id (must be unique inside the tree)
更新:
尝试使用以下技巧:
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');
}
}
希望这对您有所帮助。
重复的 ID 在 HTML 中无效,违反规范并导致问题。
https://www.w3.org/TR/2011/WD-html5-20110525/elements.html#the-id-attribute
分配 类 而不是 ids。
如之前的回答所述,Fancytree 中不允许重复的节点键(HTML 中也不允许重复的 ID)。
由于在一棵树中有多个对象实例是很常见的场景,所以有一个概念'clones'。
基本上,您包括 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