jsTree搜索排序向上向下
var _node = null, _all_match = 0, _current_match = 0;
$(document).ready(function() {
$('#area_setting_ou_tree').jstree({
'core' : {
'data' : {
"url" : "url",
"method" : "POST",
"dataType" : "json"
},
"multiple" : false,
"check_callback" : true,
"animation" : 0
},
'plugins': [
"sort",
"search",
"types"
],
'sort' : function(a, b) {
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);
},
'search' : {
'search_leaves_only' : true,
'search_callback' : function(string,node){
if(string !== '' && node.type === 'staff' && node.text.toLocaleLowerCase().match(string.toLocaleLowerCase())) {
_instance.open_all();
$('#' + node.id).addClass('jstree-search');
}else {
$('#' + node.id).removeClass('jstree-search');
}
}
},
'types' : {
"staff" : {
"icon" : "url"
},
"ou_end" : {
"icon" : "url"
},
"ou_not_end" : {
"icon" : "url"
}
}
}).on('search.jstree', function() {
var _selected_node = $('#area_setting_ou_tree ul li .jstree-search');
if(_selected_node.length === 0) return; var _instance = $('#area_setting_ou_tree').jstree(true); _all_match = _selected_node.length;
$('#all_selected').text(_all_match);
_current_match = 1;
$('#current_selected').text(_current_match); var node_id = '';
_selected_node.each(function(index, dom) {
node_id = $(this).attr('id');
if(index === 0) {
_instance.select_node(node_id);
$('#' + node_id).addClass('jstree-search');
location.hash = '#' + node_id;
}
_node.add(node_id);
});
}); var _instance = $('#area_setting_ou_tree').jstree(true);
/*
* search event for Tree
*/
var area_setting_ou_tree_to = false;
$('#area_setting_ou_tree_search').keyup(function () {
setTimeout(function() {
_all_match = 0;
_current_match = 0;
$('#current_selected').text(0);
$('#all_selected').text(0);
$('#area_set_main').html('');
_node = null;
_node = new DoubleLinkedList();
var _instance = $('#area_setting_ou_tree').jstree(true);
_instance.deselect_all();
$('#selected_message').css('visibility','visible');
$('#pre_selected').prop('disabled',false);
$('#next_selected').prop('disabled',false); if(area_setting_ou_tree_to) { clearTimeout(area_setting_ou_tree_to); }
area_setting_ou_tree_to = setTimeout(function () {
var company_department_tree_search_val = $('#area_setting_ou_tree_search').val();
$('#area_setting_ou_tree').jstree(true).search(company_department_tree_search_val);
}, 250); if($('#area_setting_ou_tree_search').val() === '') {
$('#selected_message').css('visibility','hidden');
$('#pre_selected').prop('disabled',true);
$('#next_selected').prop('disabled',true);
$('.jstree-search').removeClass('jstree-search');
$('#area_set_main').html('');
}
}, 200);
}); /*
* next step for Tree
*/
$('#next_selected').on('click', function(){
if(_node.size() === 0) return;
var _instance = $('#area_setting_ou_tree').jstree(true); // selected node is not search results
var _current_selected = null;
if(_node.find(_instance.get_selected()[0])) {
_current_selected = _node.find(_instance.get_selected()[0]);
} else {
_current_selected = _node.getHead();
_current_match = 0;
} if(_current_selected.next) {
var _temp = _current_selected.next.element;
_instance.deselect_all();
_instance.select_node(_temp);
location.hash = '#' + _temp;
showInstitutionByClickTree(_instance.get_type(_temp), _temp);
_current_match += 1;
$('#current_selected').text(_current_match);
} else {
//跳转到第一个
_current_match = 1;
var _temp = _node.getHead().next.element;
_instance.deselect_all();
_instance.select_node(_temp);
location.hash = '#' + _temp;
//showInstitutionByClickTree(_instance.get_type(_temp), _temp);
$('#current_selected').text(_current_match);
} });
/*
* previous step for Tree
*/
$('#pre_selected').on('click', function(){
if(_node.size() === 0) return;
var _instance = $('#area_setting_ou_tree').jstree(true); // selected node is not search results
var _current_selected = null;
if(!_node.find(_instance.get_selected()[0])) {
_current_selected = _node.findLast();
_current_match = _node.size();
var _temp = _current_selected.element;
_instance.deselect_all();
_instance.select_node(_temp);
location.hash = '#' + _temp;
showInstitutionByClickTree(_instance.get_type(_temp), _temp);
$('#current_selected').text(_current_match);
return;
} _current_selected = _node.find(_instance.get_selected()[0]);
if(_current_selected.previous != _node.getHead()) {
var _temp = _current_selected.previous.element;
_instance.deselect_all();
_instance.select_node(_temp);
_current_match -= 1;
$('#current_selected').text(_current_match);
} else {
//跳转到最后一个
_current_selected = _node.findLast();
_current_match = _node.size();
var _temp = _current_selected.element;
_instance.deselect_all();
_instance.select_node(_temp);
$('#current_selected').text(_current_match);
}
});
});
双链表
function Node(element){
this.element = element;
this.next = null;
this.previous = null;
} function DoubleLinkedList(){
this._head = new Node("This is Head Node.");
this._size = 0;
} DoubleLinkedList.prototype.getHead = function(){
return this._head;
}; DoubleLinkedList.prototype.isEmpty = function(){
return this._size === 0;
}; DoubleLinkedList.prototype.size = function(){
return this._size;
}; DoubleLinkedList.prototype.findLast = function(){
var currNode = this.getHead();
while(currNode.next){
currNode = currNode.next;
}
return currNode;
}; DoubleLinkedList.prototype.add = function(item){
if(item == null)
return null;
this.insert(item);
}; DoubleLinkedList.prototype.remove = function(item){
if(item) {
var node = this.find(item);
if(node == null)
return ;
if (node.next === null) {
node.previous.next = null;
node.previous = null;
} else{
node.previous.next = node.next;
node.next.previous = node.previous;
node.next = null;
node.previous = null;
}
this._size--;
}
}; DoubleLinkedList.prototype.find = function(item){
if(item == null)
return null;
var currNode = this.getHead();
while(currNode && currNode.element !== item){
currNode = currNode.next;
}
return currNode;
}; DoubleLinkedList.prototype.insert = function(newElement, item){
var newNode = new Node(newElement);
var finder = item ? this.find(item) : null;
if(!finder){
var last = this.findLast();
newNode.previous = last;
last.next = newNode;
}
else{
newNode.next = finder.next;
newNode.previous = finder;
finder.next.previous = newNode;
finder.next = newNode;
}
this._size++;
}; DoubleLinkedList.prototype.dispReverse = function(){
var currNode = this.findLast();
while(currNode != this.getHead()){
console.log(currNode.element);
currNode = currNode.previous;
}
}; DoubleLinkedList.prototype.display = function(){
var currNode = this.getHead().next;
while(currNode){
console.log(currNode.element);
currNode = currNode.next;
}
};
jstree:版本号-3.0.9
API地址:https://www.jstree.com/api/
数据:ajax后台生成
数据结构:双链表
jsTree搜索排序向上向下的更多相关文章
- 搜索实时个性化模型——基于FTRL和个性化推荐的搜索排序优化
本文来自网易云社区 作者:穆学锋 简介:传统的搜索个性化做法是定义个性化的标签,将用户和商品通过个性化标签关联起来,在搜索时进行匹配.传统做法的用户特征基本是离线计算获得,不够实时:个性化标签虽然具有 ...
- YII关联字段并带搜索排序功能
1.简介 从接触yii框架到现在已经快有两个月了,但是自己对yii框架的了解程度并不是很深,并没有系统地去学习,仅仅只是在做项目的时候遇到不懂得知识才去翻手册. 在上一个项目中因为需要将关联的表的字段 ...
- 重写 final关键字 多态调用子类特有的属性及行为(向上向下转型)
1.override 重写:在继承中,子类与父类方法名相同,参数列表相同,的方法叫重写,与返回值有关; 主要应用于系统升级. 2.final 关键字: 可修饰:1.类-->被修饰后该类不能被继 ...
- 带搜索框的jQuery下拉框插件
由于下拉框的条数有几十个,于是打算找一个可以搜索查找功能的下拉框,刚开始在网上看了几个,都是有浏览器兼容性问题,后来看到这个“带搜索框的jQuery下拉框美化插件 searchable”,看演示代码简 ...
- Atitit.获得向上向下左的右的邻居的方法 软键盘的设计..
Atitit.获得向上向下左的右的邻居的方法 软键盘的设计.. Left right可以直接使用next prev.. Up down可以使用pix 判断...获得next element的posit ...
- 带搜索框的select下拉框
利用select2制作带有搜索功能的select下拉框 1.引入线上css和js <link href="https://cdnjs.cloudflare.com/ajax/libs/ ...
- Object类 任何类都是object类的子类 用object对象接收数组 object类的向上向下转型
任何类都是object类的子类 用object对象接收数组 object类的向上向下转型
- WPF中类似使用tab键功能,可以向上向下定位
原文:WPF中类似使用tab键功能,可以向上向下定位 private void tbYyrs_KeyUp(object sender, KeyEventArgs e) { UIElement elem ...
- 【python】Leetcode每日一题-搜索排序数组2
[python]Leetcode每日一题-搜索排序数组2 [题目描述] 已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同. 在传递给函数之前,nums 在预先未知的某个下标 k( ...
随机推荐
- HTML5实战——svg学习
百度百科: SVG可缩放矢量图形(Scalable Vector Graphics)是基于可扩展标记语言(XML),用于描述二维矢量图形的一种图形格式.SVG是W3C制定的一种新的二维矢量图形格式,也 ...
- applicationContext.xml和web.xml的一些配置
applicationContext.xml <!-- test环境 --> <beans profile="test"> <context:prop ...
- EXTJS信息提示框的注意事项
1.申明html:弹出框不完整 申明xhtml 2.当非必须参数不需要设定,而后续需要设置参数时,可设置为null. Ext.onReady(){ function(){ Ext.Message.pr ...
- unity, readOnly varible
参考:http://answers.unity3d.com/questions/489942/how-to-make-a-readonly-property-in-inspector.html
- 使用Visual Studio Code搭建TypeScript开发环境
使用Visual Studio Code搭建TypeScript开发环境 1.TypeScript是干什么的 ? TypeScript是由微软Anders Hejlsberg(安德斯·海尔斯伯格,也是 ...
- CentOS 6.8下安装MySQL 5.6.33
此处操作,包含MySQL的客户端及服务端. MySQL下载地址: http://dev.mysql.com/downloads/mysql/5.6.html MySQL--.linux_glibc2. ...
- 【python】进程
multiprocessing 如果你打算编写多进程的服务程序,Unix/Linux无疑是正确的选择.由于Windows没有fork调用,难道在Windows上无法用Python编写多进程的程序? 由 ...
- yii2 使用composer安装
composer global require "fxp/composer-asset-plugin:~1.0.0" composer create-project --prefe ...
- HTML标签_01
<!DOCTYPE html> <html> <body> <h1>我的第一个标题</h1> <p>我的第一个段落.</p ...
- 为什么要用Maven?
早期还在学怎么用Ant构建项目时,就有看到说Maven是Ant的替代品,但真正意义去了解Maven,还是因为以前的公司一老员工在做OpenJMS二次开发时,从网上下载了源码,然后用Maven构建它. ...