【问题标题】:Suggestive Search From JS Array, Possible?来自 JS 数组的暗示性搜索,可能吗?
【发布时间】:2023-03-03 15:55:01
【问题描述】:

好的,所以我想要做的是使用数组的内容执行提示样式搜索,而不是对每个 keyup 执行 mySQL 数据库查询。

所以想象一个充满人名的 javascript 对象或数组:

var array = (jack,tom,john,sarah,barry,...etc);

然后我想根据用户迄今为止在输入框中输入的内容来查询这个数组的内容。所以如果他们输入了 'j',jack 和 john 都会被拉出数组。

我知道这可以通过 php mysql 和 ajax 调用实现,但出于优化的原因,我希望能够改为查询 js 数组。

希望有人能帮我解决这个问题!

W.

【问题讨论】:

    标签: php javascript jquery arrays


    【解决方案1】:

    顾名思义,这会查找以给定字符串 s 开头的数组元素。

    Array.prototype.findElementsStartingWith = function(s) {
       var r = [];
       for(var i = 0; i < this.length; i++)
          if(this[i].toString().indexOf(s) === 0)
             r.push(this[i]);
       return r;
    }
    
    // example
    
    a = ["foo", "bar", "fooba", "quu", "foooba"];
    console.log(a.findElementsStartingWith("fo"))
    

    其余部分与基于 ajax 的脚本基本相同。

    【讨论】:

    • 哇,这看起来很适合伴侣。我将在我的应用程序中对其进行测试,如果成功,会给你一个可爱的绿色勾号。非常感谢!
    • 这个可以用于多维数组还是关联数组?如果没有,您能否提出解决方案?
    • 我还没有测试过关联的,但我会在测试时回复你。 @stereofrog 是我们凡人中的 JS 神!非常感谢!
    【解决方案2】:

    http://wwwo.google.com?q=autosuggest+using+javascript

    AJAX 调用从另一个服务器端脚本文件中获取内容。你已经在 J​​S 中有你的数据了。阅读执行此操作的 AJAX 教程。然后,只需删除进行 AJAX 调用的部分并将其替换为数组的内容,就可以了。

    【讨论】:

    • 不要真的认为那是我需要的。 Ajax 是用来从服务器端抓取数据的,我已经有了要在客户端搜索的数据。我需要一个函数来搜索一个 JS 数组。
    • 是的,这就是我要说的。删除发出 AJAX 请求并获取数据的部分并将其替换为您已有的数据。另外,您是否按照 Google 搜索的方式进行操作?
    【解决方案3】:

    我最终使用以下函数来构建我的 AJAX 免费即时搜索栏:

    正在搜索的示例 JS 对象:

    var $members = {
      "123":{firstname:"wilson", lastname:"page", email:"wilpage@blueyonder.co.uk"},
      "124":{firstname:"jamie", lastname:"wright", email:"jamie@blueyonder.co.uk"}
    }
    

    搜索JS对象的函数示例:

    $membersTab.find('.searchWrap input').keyup(function(){
          var   $term       = $(this).val(),
                $faces      = $membersTab.find('.member'),
                $matches    = [];
    
          if($term.length > 0){
            $faces.hide();
            $.each($members,function(uID,details){ 
              $.each(details,function(detail,value){
                if(value.indexOf($term) === 0){//if string matches term and starts at the first character
                  $faces.filter('[uID='+uID+']').show();
                } 
              });  
            });
          }else{
            $faces.show();  
          }
    
    });
    

    如果用户部分匹配输入的搜索词,它会在列表中显示和隐藏用户。

    希望这对某人有所帮助,因为我一开始不知道如何做到这一点!

    W.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-25
      • 2022-12-17
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多