首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用`keyup`从已经显示在我的html上的‘`.json’文件中进行过滤/搜索

使用`keyup`从已经显示在我的html上的‘`.json’文件中进行过滤/搜索
EN

Stack Overflow用户
提问于 2021-08-09 06:04:10
回答 2查看 65关注 0票数 0

我已经在这上面工作了几天了,但我没有太多的运气。我有一个json文件ReptilesTX.json与几个动物,我想有选项搜索框

。然后,过滤掉已经加载的动物,只保留与搜索匹配的动物。关于我应该如何采用这种方法,有什么指导吗?下面是我到目前为止所尝试的,但我得到了一些错误,我不知道如何阅读来排除故障。提前感谢您的任何提示/帮助。

这是我的html

代码语言:javascript
运行
复制
 <div id="container">
        <form role="form">
            <div class="form-group">
                <input type="input" class="form-control input-lg" id="txt-search" placeholder="Type your search character">
            </div>

          <p id="postAnimal">Posting goes here</p>
  

    </div>

我的json文件的简化示例

代码语言:javascript
运行
复制
[
  {
    "id": "americanalligator",
    "friendlyName": "American Alligator",
    "scientificName": "Alligator mississippiensis",
    "url": "https://tpwd.texas.gov/huntwild/wild/species/americanalligator/",
    "picturePath": "/assets/americanalligator",
    "description": "The American alligator is a large...",
    "lifeHistory": "An agile swimmer, the American alligator...",
    "habitat": "Alligators are found in or near water....",
    "distribution": "The American alligator is found ..."
  },
  {
    "id": "bullsnake",
    "friendlyName": "Bullsnake",
    "scientificName": "Pituophis catinefer sayi",
    "url": "https://tpwd.texas.gov/huntwild/wild/species/bullsnake/",
    "picturePath": "/assets/bullsnake",
    "description": "The bullsnake is a heavy-bodied snake...",
    "lifeHistory": "Bullsnakes vary in temperament... ",
    "habitat": "Bullsnakes prefer sandy soils in fields...",
    "distribution": "Bullsnakes occur in the western..."

  }
  ]

我的javascript

代码语言:javascript
运行
复制
const xhr = new XMLHttpRequest();
const Reptiles = "ReptilesTX.json";

xhr.onload = function() {
if (this.readyState == 4 && this.status == 200) {
    var response = JSON.parse(this.responseText);

    let output = '';
    for(let i = 0; i < response.length; i++){

        output +=  `
    <ul id="list">
        <li id="name">${response[i].friendlyName}</li><br>
        <li><img src='${response[i].picturePath}.jpg'</li><br>
        <li><span>Scientific Name: </span>${response[i].scientificName}</li>
        <li><span>Description: </span>${response[i].description}</li><br>
        <li><span>Life History: </span>${response[i].lifeHistory}</li><br>
        <li><span>Habitat: </span>${response[i].habitat}</li><br>
        <li><span>Distribution: </span>${response[i].distribution}</li>
        <li><span>Source: </span><a href="${response[i].url}">Site</a></li>
    </ul>;
    `
    }
    //console.log(output)
    document.getElementById("postAnimal").innerHTML = output;
    } 
};
xhr.open("GET", Reptiles, true);
xhr.send();



$('#txt-search').keyup(function(){
    var searchField = $(this).val();
    if(searchField === '')  {
        $('#filter-records').html('');
        return;
    }
    
    var regex = new RegExp(searchField, "i");
    var output = '<div class="row">';
    var count = 1;
      $.each(Reptiles, function(key, val){
        if ((val.friendlyName.search(regex) != -1) || (val.scientificName.search(regex) != -1)) {output = `
        <ul id="list">
            <li id="name">${response.friendlyName}</li><br>
            <li><img src='${response.picturePath}.jpg'</li><br>
            <li><span>Scientific Name: </span>${response.scientificName}</li>
            <li><span>Description: </span>${response.description}</li><br>
            <li><span>Life History: </span>${response.lifeHistory}</li><br>
            <li><span>Habitat: </span>${response.habitat}</li><br>
            <li><span>Distribution: </span>${response.distribution}</li>
            <li><span>Source: </span><a href="${response.url}">Site</a></li>
        </ul>;
        `
          if(count%2 == 0){
            output += '</div><div class="row">'
          }
          count++;
        }
      });
      output += '</div>';
      $('#filter-records').html(output);
});

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-11 02:49:51

在一些帮助下,我能够让它工作。

代码语言:javascript
运行
复制
const xhr = new XMLHttpRequest();
const Reptiles = "ReptilesTX.json";

var dataFromServer = [];

xhr.onload = function() {
if (this.readyState == 4 && this.status == 200) {
    var response = JSON.parse(this.responseText);
    dataFromServer = response;
    let output = '';
    for(let i = 0; i < response.length; i++){

        output +=  `
    <ul id="list">
        <li id="name">${response[i].friendlyName}</li><br>
        <li><img src='${response[i].picturePath}.jpg'</li><br>
        <li><span>Scientific Name: </span>${response[i].scientificName}</li>
        <li><span>Description: </span>${response[i].description}</li><br>
        <li><span>Life History: </span>${response[i].lifeHistory}</li><br>
        <li><span>Habitat: </span>${response[i].habitat}</li><br>
        <li><span>Distribution: </span>${response[i].distribution}</li>
        <li><span>Source: </span><a href="${response[i].url}">Site</a></li>
    </ul>;
    `
    }
    //console.log(output)
    document.getElementById("postAnimal").innerHTML = output;
    } 
};
xhr.open("GET", Reptiles, true);
xhr.send();



$('#txt-search').keyup(function(){
    var searchField = $(this).val();
    if(searchField === '')  {
        $('#filter-records').html('');
        return;
    }
    
    var regex = new RegExp(searchField, "i");
    var output = '<div class="row">';
    var count = 1;
    console.log({dataFromServer})
      $.each(dataFromServer, function(key, val){
          console.log({key, val})
        if ((val.friendlyName.search(regex) != -1) || (val.scientificName.search(regex) != -1)) {output = `
        <ul id="list">
            <li id="name">${val.friendlyName}</li><br>
            <li><img src='${val.picturePath}.jpg'</li><br>
            <li><span>Scientific Name: </span>${val.scientificName}</li>
            <li><span>Description: </span>${val.description}</li><br>
            <li><span>Life History: </span>${val.lifeHistory}</li><br>
            <li><span>Habitat: </span>${val.habitat}</li><br>
            <li><span>Distribution: </span>${val.distribution}</li>
            <li><span>Source: </span><a href="${val.url}">Site</a></li>
        </ul>;
        `
          if(count%2 == 0){
            output += '</div><div class="row">'
          }
          count++;
        }
      });
      output += '</div>';
      $('#postAnimal').html(output);
});
票数 0
EN

Stack Overflow用户

发布于 2021-08-09 10:05:40

这是一个显示和隐藏HTML的基本搜索。现在它显示/隐藏列表项,但您可以将每个动物包装在一个带有id的div中并进行搜索。

此外,这只搜索整个单词,但您可以调整它来搜索每个字母,并随着搜索变得更加具体而隐藏越来越多的动物。

代码语言:javascript
运行
复制
function doFilter() {

  var searchInput = document.getElementById("searchInput").value;

  $("li").filter("li[data-" + searchInput + "]")
    .css("display", "block");

  $("li").not("li[data-" + searchInput + "]")
    .css("display", "none");
}
代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Enter one of the animals on the list, without 'data-'.<br />
The whole word must be entered.<br /><br />

<input id="searchInput" type="text" onkeyup="doFilter()" />

<ul>
  <li data-aardvark>aardvarks eat ants...</li>
  <li data-kangaroo>what's that kangaroo doing here?</li>
  <li data-lizard>lizards are cold...</li>
  <li data-alligator>gators play football...</li>
</ul>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68707477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档