使用js实现input框的模糊搜索

使用简单的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交易量来进行模糊搜索。

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值