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

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

这是我的html
<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文件的简化示例
[
{
"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
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);
});

发布于 2021-08-11 02:49:51
在一些帮助下,我能够让它工作。
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);
});https://stackoverflow.com/questions/68707477
复制相似问题