对jstree上的特定元素进行排序

时间:2018-04-20 05:53:46

标签: javascript jquery sorting jstree

我可以使用"排序" jstree的插件只对特定元素进行排序而不是所有节点?

这是我到目前为止所做的。



$('#container').jstree({
  "plugins" : ["sort"]
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.3.5/jstree.min.js"></script>
<div id="container">
  <ul>
    <li class="hm" data-jstree='{"opened":true}'>BCD
      <ul>
        <li><a>hjw</a></li>
        <li><a>16bsdnj</a></li>
        <li><a>bsa</a></li>
        <li><a>vbn<a></li>
        <li><a>sne<a></li>
      </ul>
    </li>
    <li class="hm" data-jstree='{"opened":false}'>FSA
      <ul>
        <li><a>hjw</a></li>
        <li><a>16bsdnj</a></li>
        <li><a>bsa</a></li>
        <li><a>vbn<a></li>
        <li><a>sne<a></li>
      </ul>
    </li>
    <li class="hm" data-jstree='{"opened":false}'>DSA
      <ul>
        <li><a>hjw</a></li>
        <li><a>16bsdnj</a></li>
        <li><a>bsa</a></li>
        <li><a>vbn<a></li>
        <li><a>sne<a></li>
      </ul>
    </li>
  </ul>
</div>
&#13;
&#13;
&#13;

我只想对BCD,FSA和DSA中的列表进行排序,但这些列表也会被排序。

如何在&#34; a&#34;标记

1 个答案:

答案 0 :(得分:1)

默认排序功能会对所有节点进行排序。因此,您必须创建排序功能。

这是一个演示:

$('#container').jstree({
  "plugins": ["sort"],
  // your custom sorting function
  "sort": function(a, b) {
    // find the parent node of elements that being sorted
    var parent = this.get_node(a).parent
    // check if parent node has data attribute or not
    var data = this.get_node(parent).data
    if (data) {
      // check if is the node that you attempt to sort or not
      if (data.sort === true) {
        // sort with their text
        return this.get_node(a).text > this.get_node(b).text ? 1 : -1
      }
    }
  }
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/themes/default/style.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.3.5/jstree.min.js"></script>
<div id="container">
  <ul>
    <li class="hm" data-sort=true data-jstree='{"opened":true}'>BCD
      <ul>
        <li><a>hjw</a></li>
        <li><a>16bsdnj</a></li>
        <li><a>bsa</a></li>
        <li><a>vbn</a></li>
        <li><a>sne</a></li>
      </ul>
    </li>
    <li class="hm" data-jstree='{"opened":false}'>FSA
      <ul>
        <li><a>hjw</a></li>
        <li><a>16bsdnj</a></li>
        <li><a>bsa</a></li>
        <li><a>vbn</a></li>
        <li><a>sne</a></li>
      </ul>
    </li>
    <li class="hm" data-jstree='{"opened":false}'>DSA
      <ul>
        <li><a>hjw</a></li>
        <li><a>16bsdnj</a></li>
        <li><a>bsa</a></li>
        <li><a>vbn</a></li>
        <li><a>sne</a></li>
      </ul>
    </li>
  </ul>
</div>