使用简单的js代码就可以实现模糊搜索功能,使用indexOf属性。
json假数据:使用数组包对象的方法,在json中设置了三列数据,分别是:名称,性别和交易额。
[{
"name": "虚拟星辰",
"deal": 420,
"sex": 1
}, {
"name": "神秘星河",
"deal": 301,
"sex": 2
}, {
"name": "灵光闪现",
"deal": 290,
"sex": 1
}, {
"name": "微笑的月亮",
"deal": 468,
"sex": 2
}, {
"name": "萌猫棉花糖",
"deal": 105,
"sex": 2
}, {
"name": "未知的旅行家",
"deal": 900,
"sex": 1
}, {
"name": "千变万化",
"deal": 813,
"sex": 1
}, {
"name": "梦幻仙境",
"deal": 742,
"sex": 2
}, {
"name": "甜点糖果",
"deal": 609,
"sex": 2
}, {
"name": "网络风行",
"deal": 305,
"sex": 1
}, {
"name": "星星饼干",
"deal": 1059,
"sex": 2
}]
HTML及css样式代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
h2 {
text-align: center;
}
input {
width: 50%;
margin-left: 25%;
}
.content {
font-size: 16px;
display: flex;
justify-content: space-around;
margin-top: 30px;
}
.monicker {
margin-top: 10px;
}
.gender {
margin-top: 10px;
text-align: center;
}
.trades {
margin-top: 10px;
text-align: center;
}
</style>
</head>
<body>
<h2>排行榜</h2>
<input type="text" class="inp" onchange="but()" />
<div class="content">
<div class="names">姓名
<div class="monicker">虚拟星辰</div>
</div>
<div class="sexs">性别<div class="gender">男</div>
</div>
<div class="trade">交易量
<div class="trades">420</div>
</div>
</div>
<script src="js/dim.js"></script>
</body>
</html>
js代码:
// 声明一个全局变量data来存储从服务器获取的数据
let data;
let xhr = new XMLHttpRequest();
xhr.open('get', 'js/dim.json', true);
xhr.send();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
let text = xhr.responseText;
console.log(text);
data = JSON.parse(text);
console.log(data);
// 调用渲染函数
list(data);
}
};
// 封装函数
function list(data) {
// 拼接姓名
let str = '';
// 拼接性别
let stre = '';
// 拼接交易量
let strs = '';
str += `<div class="names">姓名</div>`;
stre += `<div class="sexs">性别</div>`;
strs += `<div class="trade">交易量</div>`;
// 遍历数组,拼接内容
for (let i = 0; i < data.length; i++) {
str += `<div class="monicker">${data[i].name}</div>`;
// 使用三元表达式,条件1 判断sex的值是否为1,为1则是男生,否则是女生
stre += `<div class="gender">${data[i].sex==1?`男`:`女`}</div>`;
strs += `<div class="trades">${data[i].deal}</div>`
};
// 将拼接好的内容设置到对应的HTML元素中
document.getElementsByClassName('names')[0].innerHTML = str;
document.getElementsByClassName('sexs')[0].innerHTML = stre;
document.getElementsByClassName('trade')[0].innerHTML = strs;
};
// 获取输入框
let inp = document.getElementsByClassName('inp')[0];
console.log(inp);
// 绑定onchange事件
function but() {
console.log(data, inp.value);
// 创建一个空数组用于存储过滤后的数据
var arr = [];
// 遍历全局变量data中的数据
for (var i = 0; i < data.length; i++) {
// 检查数据中name属性是否包含输入框的值
if (data[i].name.indexOf(inp.value) >= 0 || data[i].deal.toString().indexOf(inp.value) >= 0) {
// 如果包含,则将数据添加到arr数组中
arr.push(data[i]);
};
};
// 打印结果
console.log(arr);
// 渲染页面
list(arr);
};
上面的代码是通过假数据中的name和deal交易量来进行模糊搜索。