javascript - 在 JSON 文件中搜索并将值返回到 HTML 标记
问题描述
我正在研究一个搜索框,在这个搜索框中我搜索所有行并在标签中显示结果,选择结果后,该值将添加到搜索框中。但它不会显示在 HTML 标记中。在以下几行中,我分享了代码。
$(document).ready(function(){
$.ajaxSetup({ cache: false });
$('#search').keyup(function(){
$('#result').html('');
$('#state').val('');
var searchField = $('#search').val();
var expression = new RegExp(searchField, "i");
$.getJSON('json/db.json', function(data) {
$.each(data, function(key, value){
if (value.InstrumentID.search(expression) != -1 || value.LVal18.search(expression) != -1 || value.LVal18AFC.search(expression) != -1 || value.LVal30.search(expression) != -1 || value.CompanyLVal18AFC.search(expression) != -1 || value.CompanyLVal30.search(expression) != -1)
{
$('#result').append('<li class="list-group-item link-class"> '+value.LVal30+' | <span class="text-muted">'+value.LVal18AFC+'</span></li>');
}
});
});
});
$('#result').on('click', 'li', function() {
var click_text = $(this).text().split('|');
$('#search').val($.trim(click_text[0]));
$("#result").html('');
});
$("#getValue").click(function(){
console.log(value.LVal30);
});
});
此外,JSON 格式如下:
[{ "InstrumentID": "IR0101", "LVal18": "AR", "LVal18AFC": "AR", "LVal30": "AR", "CompanyInstrumentID": "IRO101", "CompanyLVal18AFC": "AR", "CompanyLVal30": "AR" }, { "InstrumentID": "IRR1C0101", "LVal18": "Chadormalu-R", "LVal18AFC": "AB", "LVal30": "AB", "CompanyInstrumentID": "IRO0001", "CompanyLVal18AFC": "AB", "CompanyLVal30": "AB" } ]
我有一个简单的输入,如下所示:
<div class="input-group">
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button" id="getValue" >Chose</button>
</div>
<input type="text" name="search" id="search" placeholder="Search" class="form-control" data-value >
</div>
<ul class="list-group" id="result"></ul>
正如您在图片中看到的那样,我在框中得到了结果,但控制台中没有任何反应!
编辑 - 添加错误:
Uncaught ReferenceError: value is not defined
at HTMLButtonElement.<anonymous> (script3.js:138)
at HTMLButtonElement.dispatch (jquery-3.5.1.js:5429)
at HTMLButtonElement.elemData.handle (jquery-3.5.1.js:5233)
script3.js 的第 138 行是:
console.log(value.LVal30);
解决方案
您可以尝试以下方法来过滤 JSON 数据。
var data = [{ "InstrumentID": "IR0101", "LVal18": "AR", "LVal18AFC": "AR", "LVal30": "AR", "CompanyInstrumentID": "IRO101", "CompanyLVal18AFC": "AR", "CompanyLVal30": "AR" }, { "InstrumentID": "IRR1C0101", "LVal18": "Chadormalu-R", "LVal18AFC": "AB", "LVal30": "AB", "CompanyInstrumentID": "IRO0001", "CompanyLVal18AFC": "AB", "CompanyLVal30": "AB" } ]
var searchterm="Company";
var result = data.filter(item=> {
var keys = Object.keys(item);
var found= keys.filter(key=> {
if (item[key].toLowerCase().indexOf(searchterm) != -1) {
return item;
}
});
return ((found && found.length >0) ? true : false);
})
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
一旦你得到数据。循环通过它并在你的 HTML 中显示它,如下所示。
result.map(value=> {
$('#result').append('<li class="list-group-item link-class"> '+value.LVal30+' | <span class="text-muted">'+value.LVal18AFC+'</span></li>');
});
推荐阅读
- bash - 通过 youtube-dl 下载时删除视频的视频 ID
- asp.net-mvc - Reporting Services 提示凭据
- error-handling - 错误:监听 EADDRINUSE:地址已在使用 :::3000 .....我收到此错误请告诉我解决方案
- firebase - 在 onPressed 操作期间在颤动登录表单中找不到路由
- gnuplot - gnuplot 可以创建相当于 Rstudio 脚本的内容吗?
- sql - 存储过程/查询在所有用例的 2% 中需要附加字段。最佳实践?
- sql-server - 首先在 EF Core 代码中将 DeleteBehavior 从 Cascade 更改为 Restrict
- java - “BufferedInputStream”与“配置大小的 FileInputStream”
- php - 按多列之和排序 laravel
- javascript - 我无法使用 POST 方法将值从 JS 传递到 PHP 表单