在fancytree插件

时间:2016-01-22 11:21:29

标签: javascript jquery fancytree

我正在努力创建公司结构。 一名员工可以在两个部门工作,但这是具有相同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>

3 个答案:

答案 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