Javascript 使用jstree搜索插件启用对节点标题的精确多词搜索
我使用jstree搜索插件()在我的HTML树的标题字段中搜索多个ID 我采用了原始的jstree(第3398行),并根据建议对其进行了更改,以便在树的标题字段中启用多词搜索 它适用于“title contains”(标题包含)查询(例如,节点x的标题ID:40857332和节点y的标题ID:408包含搜索词ID:408),但我不知道如何更改代码以仅查找精确匹配(例如,节点y的标题ID:408与搜索词ID:408精确匹配) 函数的调用方式如下:Javascript 使用jstree搜索插件启用对节点标题的精确多词搜索,javascript,jquery,jquery-plugins,jstree,Javascript,Jquery,Jquery Plugins,Jstree,我使用jstree搜索插件()在我的HTML树的标题字段中搜索多个ID 我采用了原始的jstree(第3398行),并根据建议对其进行了更改,以便在树的标题字段中启用多词搜索 它适用于“title contains”(标题包含)查询(例如,节点x的标题ID:40857332和节点y的标题ID:408包含搜索词ID:408),但我不知道如何更改代码以仅查找精确匹配(例如,节点y的标题ID:408与搜索词ID:408精确匹配) 函数的调用方式如下: $(“#我的html_树”).jstree(“搜索
$(“#我的html_树”).jstree(“搜索”,搜索单词)代码>
使用以下配置:
“搜索”:{“不区分大小写”:true,“搜索方法”:“jstree\u title\u contains\u multi”}
变量“search_words”是一个包含多个ID的字符串:
var search_words = "ID:4 ID:7 ID:3188";
HTML树节点的格式:
<li id="3188"> <a title="ID:3188">Tree node 3188</a></li>
树节点3188
这是我更改的代码:
$.expr[':'].jstree_title_contains_multi = function(a,i,m){
var word, words = [];
var searchFor = m[3].toLowerCase().replace(/^\s+/g,'').replace(/\s+$/g,'');
if(searchFor.indexOf(' ') >= 0) {
words = searchFor.split(' ');
}
else {
words = [searchFor];
}
for (var i=0; i < words.length; i++) {
word = words[i];
if((a.getAttribute("title") || "").toLowerCase().indexOf(word) >= 0) {
return true;
}
}
return false;
};
"search" : {"case_insensitive" : true,
"search_method": "jstree_codigo_descripcion"}
$.expr[':'].jstree\u title\u包含多个=函数(a、i、m){
var-word,words=[];
var searchFor=m[3].toLowerCase().replace(/^\s+/g',).replace(/\s+/$/g',);
if(searchFor.indexOf(“”)>=0){
words=searchFor.split(“”);
}
否则{
单词=[搜索];
}
for(var i=0;i=0){
返回true;
}
}
返回false;
};
我必须如何更改代码才能只搜索精确匹配
非常感谢您的帮助。我找到了以下解决方案: 而不是使用
if((a.getAttribute("title") || "").toLowerCase().indexOf(word) >= 0)
我用
if((a.getAttribute("title") || "").toLowerCase() === word )
使用id属性而不是标题更简洁。你甚至可以两者兼用 配置:
$.expr[':'].jstree_title_contains_multi = function(a,i,m){
var word, words = [];
var searchFor = m[3].toLowerCase().replace(/^\s+/g,'').replace(/\s+$/g,'');
if(searchFor.indexOf(' ') >= 0) {
words = searchFor.split(' ');
}
else {
words = [searchFor];
}
for (var i=0; i < words.length; i++) {
word = words[i];
if((a.getAttribute("title") || "").toLowerCase().indexOf(word) >= 0) {
return true;
}
}
return false;
};
"search" : {"case_insensitive" : true,
"search_method": "jstree_codigo_descripcion"}
搜索呼叫
var codigo = "0102";
var descripcion = "sdf";
jQuery("#arbol").jstree("search",cod +"-"+ desc);
树
<div id="arbol">
<ul>
<li><a>01</a>
<ul>
<li><a>0101</a>
<ul>
<li><a id="010101" title="foo">010101 foo</a></li>
<li><a id="010102" title="bar">010102 bar</a></li>
</ul>
</li>
<li><a>0102</a>
<ul>
<li><a id="010201" title="asdf">010201 asdf</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>