Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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 按关键字选择JS搜索_Javascript_Jquery Chosen - Fatal编程技术网

Javascript 按关键字选择JS搜索

Javascript 按关键字选择JS搜索,javascript,jquery-chosen,Javascript,Jquery Chosen,是否有任何方法可以让所选内容不仅仅是搜索功能的选项文本 例如: <select> <option data-keywords="circle,ball,sphere">Circle</option> <option data-keywords="rectangle,square">Rectangle</option> </select> 它不必在关键字上做匹配下划线,它只会在匹配文本时做匹配下划线,就像默认

是否有任何方法可以让所选内容不仅仅是搜索功能的选项文本

例如:

<select>
    <option data-keywords="circle,ball,sphere">Circle</option>
    <option data-keywords="rectangle,square">Rectangle</option>
</select>
它不必在关键字上做匹配下划线,它只会在匹配文本时做匹配下划线,就像默认情况下一样


如果它不是本机的,如果以前没有这样做过,我将如何在javascript中添加它。

我相信类似的方法会奏效:

JavaScript


我相信这样做会奏效:

JavaScript


一个相当实际、快速的解决方案可以应用如下

请注意

此解决方案需要/假设:

所选版本1.1.0 每个选项标记的数据关键字属性 “数据关键字”属性中用逗号分隔的关键字 好的,让我们开始吧

打开jquery.selected.js文件

您将无法使用缩小版

一,。确保在本地选项中存储数据属性

位置=>add_选项

完整定义

选择parser.prototype.add_option=functionoption,group_位置,group_禁用{}

编辑

查找this.parsed.push,在定义的底部,样式的正下方,添加以下代码:

keywords: ($(option).data().keywords!==undefined 
   ? $(option).data().keywords.split(',') 
   : false)
keywordMatch=(option.keywords && option.keywords.indexOf(searchText) > -1);
if(keywordMatch)
    option.search_match=true;
option.search_text = keywordMatch ? text : (text.substr(0, startpos) + '<em>' + text.substr(startpos));
二,。确保搜索功能已解析关键字

位置=>winnow_结果

完整定义

编辑

2.1将新变量关键字匹配添加到top声明:

var escapedSearchText,option,regex,regexAnchor,results,results_组,searchText,startpos,text,zregex,_i,_len,_ref

变成:

var escapedSearchText、option、regex、regexAnchor、结果、结果组、searchText、startpos、text、zregex、_i、_len、_ref、关键字匹配

2.2发现这种情况:如果!option.group&!此.group_search{},在设置option.search_match的第二行之后,添加以下代码:

keywords: ($(option).data().keywords!==undefined 
   ? $(option).data().keywords.split(',') 
   : false)
keywordMatch=(option.keywords && option.keywords.indexOf(searchText) > -1);
if(keywordMatch)
    option.search_match=true;
option.search_text = keywordMatch ? text : (text.substr(0, startpos) + '<em>' + text.substr(startpos));
2.3查找此任务:

option.search_text = text.substr(0, startpos) + '<em>' + text.substr(startpos);
并将其替换为以下代码:

keywords: ($(option).data().keywords!==undefined 
   ? $(option).data().keywords.split(',') 
   : false)
keywordMatch=(option.keywords && option.keywords.indexOf(searchText) > -1);
if(keywordMatch)
    option.search_match=true;
option.search_text = keywordMatch ? text : (text.substr(0, startpos) + '<em>' + text.substr(startpos));
这些修改以快速实现的形式出现。如果需要更多选项,例如关键字不区分大小写,则需要自己实现这些部分


如果有问题或我忘记了什么,请告诉我。

一个相当实际、快速的解决方案可以应用如下

请注意

此解决方案需要/假设:

所选版本1.1.0 每个选项标记的数据关键字属性 “数据关键字”属性中用逗号分隔的关键字 好的,让我们开始吧

打开jquery.selected.js文件

您将无法使用缩小版

一,。确保在本地选项中存储数据属性

位置=>add_选项

完整定义

选择parser.prototype.add_option=functionoption,group_位置,group_禁用{}

编辑

查找this.parsed.push,在定义的底部,样式的正下方,添加以下代码:

keywords: ($(option).data().keywords!==undefined 
   ? $(option).data().keywords.split(',') 
   : false)
keywordMatch=(option.keywords && option.keywords.indexOf(searchText) > -1);
if(keywordMatch)
    option.search_match=true;
option.search_text = keywordMatch ? text : (text.substr(0, startpos) + '<em>' + text.substr(startpos));
二,。确保搜索功能已解析关键字

位置=>winnow_结果

完整定义

编辑

2.1将新变量关键字匹配添加到top声明:

var escapedSearchText,option,regex,regexAnchor,results,results_组,searchText,startpos,text,zregex,_i,_len,_ref

变成:

var escapedSearchText、option、regex、regexAnchor、结果、结果组、searchText、startpos、text、zregex、_i、_len、_ref、关键字匹配

2.2发现这种情况:如果!option.group&!此.group_search{},在设置option.search_match的第二行之后,添加以下代码:

keywords: ($(option).data().keywords!==undefined 
   ? $(option).data().keywords.split(',') 
   : false)
keywordMatch=(option.keywords && option.keywords.indexOf(searchText) > -1);
if(keywordMatch)
    option.search_match=true;
option.search_text = keywordMatch ? text : (text.substr(0, startpos) + '<em>' + text.substr(startpos));
2.3查找此任务:

option.search_text = text.substr(0, startpos) + '<em>' + text.substr(startpos);
并将其替换为以下代码:

keywords: ($(option).data().keywords!==undefined 
   ? $(option).data().keywords.split(',') 
   : false)
keywordMatch=(option.keywords && option.keywords.indexOf(searchText) > -1);
if(keywordMatch)
    option.search_match=true;
option.search_text = keywordMatch ? text : (text.substr(0, startpos) + '<em>' + text.substr(startpos));
这些修改以快速实现的形式出现。如果需要更多选项,例如关键字不区分大小写,则需要自己实现这些部分


如果有问题或我忘记了什么,请告诉我。

谢谢SquareCat提供的出色解决方案!我想有能力搜索使用多个关键字,包括部分关键字,所以我开发了一些粗糙的代码来完成这项工作

添加到SquareCats解决方案中:

而不是使用:

keywordMatch=(option.keywords && option.keywords.indexOf(searchText) > -1);
改用这个:

keywordMatch=this.keyword_string_match(option.keywords,searchText);
并添加此功能:

AbstractChosen.prototype.keyword_string_match = function(keyword_array, searchtextstring) {
  var value, searchlength, searchterm;
  var continuetonext = "";
  var searchstring = searchtextstring; 
  var wordmatchcounter = 0;
  if (searchstring !== ""){
    searchstring = searchstring.split(' ');
      for (searchterm = 0 ; searchterm < searchstring.length; searchterm++ ){
        if (continuetonext == "" || continuetonext == true){
          continuetonext = false;
          searchtext = searchstring[searchterm];
          for (var i = 0; i < keyword_array.length; ++i) {
              value = keyword_array[i];
              searchlength = searchtext.length;
              if (value.substring(0, searchlength) === searchtext) {
               continuetonext = true;
               wordmatchcounter++;     
              }else{
                continuetonext = false;
              };
          };
       };
      };
    if (wordmatchcounter == searchterm){return true}else{return false};
  }else{return false};
};

感谢SquareCat为您提供了出色的解决方案!我想有能力搜索使用多个关键字,包括部分关键字,所以我开发了一些粗糙的代码来完成这项工作

添加到SquareCats解决方案中:

而不是使用:

keywordMatch=(option.keywords && option.keywords.indexOf(searchText) > -1);
改用这个:

keywordMatch=this.keyword_string_match(option.keywords,searchText);
并添加此功能:

AbstractChosen.prototype.keyword_string_match = function(keyword_array, searchtextstring) {
  var value, searchlength, searchterm;
  var continuetonext = "";
  var searchstring = searchtextstring; 
  var wordmatchcounter = 0;
  if (searchstring !== ""){
    searchstring = searchstring.split(' ');
      for (searchterm = 0 ; searchterm < searchstring.length; searchterm++ ){
        if (continuetonext == "" || continuetonext == true){
          continuetonext = false;
          searchtext = searchstring[searchterm];
          for (var i = 0; i < keyword_array.length; ++i) {
              value = keyword_array[i];
              searchlength = searchtext.length;
              if (value.substring(0, searchlength) === searchtext) {
               continuetonext = true;
               wordmatchcounter++;     
              }else{
                continuetonext = false;
              };
          };
       };
      };
    if (wordmatchcounter == searchterm){return true}else{return false};
  }else{return false};
};

这是经过深思熟虑的。他们已经不支持它了吗?嗯,如果我输入k,当关键字为kjoc时,它不匹配。。。它只能在完全匹配的情况下工作,这是正确的。但是,您可以轻松实现所需的行为。勾选2.2,在这里我们使用indexOf。在给定的示例中,我们通过在option.keywords中查找完整的匹配项来比较字符串。如果您想允许更灵活的过滤机制,可以映射
option.keywords每个条目上的比较函数。至于缺乏支持——我想这从来不是他们项目的要求。这是经过深思熟虑的。他们已经不支持它了吗?嗯,如果我输入k,当关键字为kjoc时,它不匹配。。。它只能在完全匹配的情况下工作,这是正确的。但是,您可以轻松实现所需的行为。勾选2.2,在这里我们使用indexOf。在给定的示例中,我们通过在option.keywords中查找完整的匹配项来比较字符串。如果希望允许更灵活的过滤机制,可以在option.keywords的每个条目上映射比较函数。至于缺乏支持,我想这从来不是他们项目的要求。