Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jstree搜索插件启用对节点标题的精确多词搜索_Javascript_Jquery_Jquery Plugins_Jstree - Fatal编程技术网

Javascript 使用jstree搜索插件启用对节点标题的精确多词搜索

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(“搜索

我使用jstree搜索插件()在我的HTML树的标题字段中搜索多个ID

我采用了原始的jstree(第3398行),并根据建议对其进行了更改,以便在树的标题字段中启用多词搜索

它适用于“title contains”(标题包含)查询(例如,节点x的标题ID:40857332和节点y的标题ID:408包含搜索词ID:408),但我不知道如何更改代码以仅查找精确匹配(例如,节点y的标题ID:408与搜索词ID:408精确匹配)

函数的调用方式如下:

$(“#我的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>