[英]How to make live search on an Div with input filter
I have some troubles with a live search script.我在使用实时搜索脚本时遇到了一些问题。
I want to make it when i type some in my search input to hide div that not contains this text in search input.我想在我的搜索输入中键入一些内容以隐藏搜索输入中不包含此文本的div 。 My code so far.
到目前为止我的代码。
<html>
<head></head>
<body>
<input placeholder="Search Me" id="box" type="text" />
<div id="Container">
<div data-name="Anni">
Anni
</div>
<div data-name="Pedro">
Pedro
</div>
<div data-name="Tomi">
Tomi
</div>
</div>
</body>
</html>
JavaScript: JavaScript:
$("#box").on('keyup', function(){
var matcher = new RegExp($(this).val(), 'gi');
$('#Container').show().not(function(){
return matcher.test($(this).find('data-name').text())
}).hide();
});
You need to search through the children()
of the container and use filter()
instead of not()
您需要搜索容器的
children()
并使用filter()
而不是not()
$("#box").on('keyup', function(){ var matcher = new RegExp($(this).val(), 'gi'); $('#Container').children().hide().filter(function(){ return matcher.test($(this).text()) }).show(); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input placeholder="Search Me" id="box" type="text" /> <div id="Container"> <div data-name="Anni"> Anni </div> <div data-name="Pedro"> Pedro </div> <div data-name="Tomi"> Tomi </div> </div>
On my own I can offer a solution using the each()
method.我自己可以使用
each()
方法提供解决方案。
$("#box").on('keyup', function(){ let value = $(this).val().toLowerCase(); $('#Container div[data-name]').each(function () { if ($(this).text().toLowerCase().indexOf(value) === -1) { $(this).hide(); } else { $(this).show(); } }); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <html> <head></head> <body> <input placeholder="Search Me" id="box" type="text" /> <div id="Container"> <div data-name="Anni"> Anni </div> <div data-name="Pedro"> Pedro </div> <div data-name="Tomi"> Tomi </div> </div> </body> </html>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.