• jsTree搜索排序向上向下


      1 var _node = null, _all_match = 0, _current_match = 0;
      2 $(document).ready(function() {
      3     $('#area_setting_ou_tree').jstree({
      4         'core' : {
      5             'data' : {
      6                 "url" : "url",
      7                 "method" : "POST",
      8                 "dataType" : "json"
      9             },
     10             "multiple" : false,
     11             "check_callback" : true,
     12             "animation" : 0
     13         },
     14         'plugins': [
     15             "sort",
     16             "search",
     17             "types"
     18         ],
     19         'sort' : function(a, b) {
     20             return this.get_type(a) === this.get_type(b) ? (this.get_text(a) > this.get_text(b) ? 1 : -1) : (this.get_type(a) >= this.get_type(b) ? 1 : -1);
     21         },
     22         'search' : {
     23             'search_leaves_only' : true,
     24             'search_callback' : function(string,node){
     25                 if(string !== '' && node.type === 'staff' && node.text.toLocaleLowerCase().match(string.toLocaleLowerCase())) {
     26                     _instance.open_all();
     27                     $('#' + node.id).addClass('jstree-search');
     28                 }else {
     29                     $('#' + node.id).removeClass('jstree-search');
     30                 }
     31             }
     32         },
     33         'types' : {
     34             "staff" : {
     35                 "icon" : "url"
     36             },
     37             "ou_end" : {
     38                 "icon" : "url"
     39             },
     40             "ou_not_end" : {
     41                 "icon" : "url"
     42             }
     43         }
     44     }).on('search.jstree', function() {
     45         var _selected_node = $('#area_setting_ou_tree ul li .jstree-search');
     46         if(_selected_node.length === 0) return;
     47 
     48         var _instance =  $('#area_setting_ou_tree').jstree(true);
     49 
     50         _all_match = _selected_node.length;
     51         $('#all_selected').text(_all_match);
     52         _current_match = 1;
     53         $('#current_selected').text(_current_match);
     54 
     55         var node_id = '';
     56         _selected_node.each(function(index, dom) {
     57             node_id = $(this).attr('id');
     58             if(index === 0) {
     59                 _instance.select_node(node_id);
     60                 $('#' + node_id).addClass('jstree-search');
     61                 location.hash = '#' + node_id;
     62             }
     63             _node.add(node_id);
     64         });
     65     });
     66 
     67     var _instance =  $('#area_setting_ou_tree').jstree(true);
     68     /*
     69      * search event for Tree
     70      */
     71     var area_setting_ou_tree_to = false;
     72     $('#area_setting_ou_tree_search').keyup(function () {
     73         setTimeout(function() {
     74             _all_match = 0;
     75             _current_match = 0;
     76             $('#current_selected').text(0);
     77             $('#all_selected').text(0);
     78             $('#area_set_main').html('');
     79             _node = null;
     80             _node = new DoubleLinkedList();
     81             var _instance =  $('#area_setting_ou_tree').jstree(true);
     82             _instance.deselect_all();
     83             $('#selected_message').css('visibility','visible');
     84             $('#pre_selected').prop('disabled',false);
     85             $('#next_selected').prop('disabled',false);
     86 
     87             if(area_setting_ou_tree_to) { clearTimeout(area_setting_ou_tree_to); }
     88             area_setting_ou_tree_to = setTimeout(function () {
     89                 var company_department_tree_search_val = $('#area_setting_ou_tree_search').val();
     90                 $('#area_setting_ou_tree').jstree(true).search(company_department_tree_search_val);
     91             }, 250);
     92 
     93             if($('#area_setting_ou_tree_search').val() === '') {
     94                 $('#selected_message').css('visibility','hidden');
     95                 $('#pre_selected').prop('disabled',true);
     96                 $('#next_selected').prop('disabled',true);
     97                 $('.jstree-search').removeClass('jstree-search');
     98                 $('#area_set_main').html('');
     99             }
    100         }, 200);
    101     });
    102 
    103     /*
    104      *   next step  for Tree
    105      */
    106     $('#next_selected').on('click', function(){
    107         if(_node.size() === 0) return;
    108         var _instance = $('#area_setting_ou_tree').jstree(true);
    109 
    110         // selected node is not search results
    111         var _current_selected = null;
    112         if(_node.find(_instance.get_selected()[0])) {
    113             _current_selected = _node.find(_instance.get_selected()[0]);
    114         } else {
    115             _current_selected = _node.getHead();
    116             _current_match = 0;
    117         }
    118 
    119         if(_current_selected.next) {
    120             var _temp = _current_selected.next.element;
    121             _instance.deselect_all();
    122             _instance.select_node(_temp);
    123             location.hash = '#' + _temp;
    124             showInstitutionByClickTree(_instance.get_type(_temp), _temp);
    125             _current_match += 1;
    126             $('#current_selected').text(_current_match);
    127         } else {
    128             //跳转到第一个
    129             _current_match = 1;
    130             var _temp = _node.getHead().next.element;
    131             _instance.deselect_all();
    132             _instance.select_node(_temp);
    133             location.hash = '#' + _temp;
    134             //showInstitutionByClickTree(_instance.get_type(_temp), _temp);
    135             $('#current_selected').text(_current_match);
    136         }
    137 
    138     });
    139     /*
    140      *   previous step for Tree
    141      */
    142     $('#pre_selected').on('click', function(){
    143         if(_node.size() === 0) return;
    144         var _instance = $('#area_setting_ou_tree').jstree(true);
    145 
    146         // selected node is not search results
    147         var _current_selected = null;
    148         if(!_node.find(_instance.get_selected()[0])) {
    149             _current_selected = _node.findLast();
    150             _current_match = _node.size();
    151             var _temp = _current_selected.element;
    152             _instance.deselect_all();
    153             _instance.select_node(_temp);
    154             location.hash = '#' + _temp;
    155             showInstitutionByClickTree(_instance.get_type(_temp), _temp);
    156             $('#current_selected').text(_current_match);
    157             return;
    158         }
    159 
    160         _current_selected = _node.find(_instance.get_selected()[0]);
    161         if(_current_selected.previous !=  _node.getHead()) {
    162             var _temp = _current_selected.previous.element;
    163             _instance.deselect_all();
    164             _instance.select_node(_temp);
    165             _current_match -= 1;
    166             $('#current_selected').text(_current_match);
    167         } else {
    168             //跳转到最后一个
    169             _current_selected = _node.findLast();
    170             _current_match = _node.size();
    171             var _temp = _current_selected.element;
    172             _instance.deselect_all();
    173             _instance.select_node(_temp);
    174             $('#current_selected').text(_current_match);
    175         }
    176     });
    177 });    

    双链表

     1 function Node(element){
     2     this.element = element;
     3     this.next = null;
     4     this.previous = null;
     5 }
     6 
     7 function DoubleLinkedList(){
     8     this._head = new Node("This is Head Node.");
     9     this._size = 0;
    10 }
    11 
    12 DoubleLinkedList.prototype.getHead = function(){
    13     return this._head;
    14 };
    15 
    16 DoubleLinkedList.prototype.isEmpty = function(){
    17     return this._size === 0;
    18 };
    19 
    20 DoubleLinkedList.prototype.size = function(){
    21     return this._size;
    22 };
    23 
    24 DoubleLinkedList.prototype.findLast = function(){
    25     var currNode = this.getHead();
    26     while(currNode.next){
    27         currNode = currNode.next;
    28     }
    29     return currNode;
    30 };
    31 
    32 DoubleLinkedList.prototype.add = function(item){
    33     if(item == null)
    34         return null;
    35     this.insert(item);
    36 };
    37 
    38 DoubleLinkedList.prototype.remove = function(item){
    39     if(item) {
    40         var node = this.find(item);
    41         if(node == null)
    42             return ;
    43         if (node.next === null) {
    44             node.previous.next = null;
    45             node.previous = null;
    46         } else{
    47             node.previous.next = node.next;
    48             node.next.previous = node.previous;
    49             node.next = null;
    50             node.previous = null;
    51         }
    52         this._size--;
    53     }
    54 };
    55 
    56 DoubleLinkedList.prototype.find = function(item){
    57     if(item == null)
    58         return null;
    59     var currNode = this.getHead();
    60     while(currNode && currNode.element !== item){
    61         currNode = currNode.next;
    62     }
    63     return currNode;
    64 };
    65 
    66 DoubleLinkedList.prototype.insert = function(newElement, item){
    67     var newNode = new Node(newElement);
    68     var finder = item ? this.find(item) : null;
    69     if(!finder){
    70         var last = this.findLast();
    71         newNode.previous = last;
    72         last.next = newNode;
    73     }
    74     else{
    75         newNode.next = finder.next;
    76         newNode.previous = finder;
    77         finder.next.previous = newNode;
    78         finder.next = newNode;
    79     }
    80     this._size++;
    81 };
    82 
    83 DoubleLinkedList.prototype.dispReverse = function(){
    84     var currNode = this.findLast();
    85     while(currNode != this.getHead()){
    86         console.log(currNode.element);
    87         currNode = currNode.previous;
    88     }
    89 };
    90 
    91 DoubleLinkedList.prototype.display = function(){
    92     var currNode = this.getHead().next;
    93     while(currNode){
    94         console.log(currNode.element);
    95         currNode = currNode.next;
    96     }
    97 };

    jstree:版本号-3.0.9 

    API地址:https://www.jstree.com/api/

    数据:ajax后台生成

    数据结构:双链表

  • 相关阅读:
    ASP.NET WebForm Best Practice 之ViewState
    我会为开源和自由学习,使用JAVA.但我决不会为了开源和自由放弃.NET
    EXT调用ASP.NET AJAX WebService
    我的2007
    博客园迎新春对联
    NBear.Mapping使用教程(2):NBear.Mapping的配置系统
    NBear.Mapping使用教程(3):第一个简单例子
    使用LumaQQ来开发QQ机器人
    解决方案迁移到Visual Studio 2008的一些相关问题
    NBear.Mapping使用教程(4):实体对象与ADO.NET对象的转换
  • 原文地址:https://www.cnblogs.com/maduar/p/5598739.html
Copyright © 2020-2023  润新知