Javascript 如何按名称筛选元素
我有3部电影,湮没,炸弹x城市和通勤者,我不知道热把javascript代码,所以当我开始搜索像安,只有湮没电影框出现,其他不显示…如过滤…请帮助我不太擅长这方面的东西,我想学习。提前感谢 莫夫布兰克 歼灭Javascript 如何按名称筛选元素,javascript,html,filtering,Javascript,Html,Filtering,我有3部电影,湮没,炸弹x城市和通勤者,我不知道热把javascript代码,所以当我开始搜索像安,只有湮没电影框出现,其他不显示…如过滤…请帮助我不太擅长这方面的东西,我想学习。提前感谢 莫夫布兰克 歼灭 类型:冒险、幻想 炸弹城 体裁:动作、犯罪 通勤者 类型:动作、戏剧 我会将属性onkeyup添加到输入元素中,并将其设置为一个查看输入文本的函数,然后在moviebox div元素中循环并隐藏它们(如果h3元素文本不包含输入值) 例如: <input type="text" id=
类型:冒险、幻想
炸弹城体裁:动作、犯罪
通勤者类型:动作、戏剧
我会将属性onkeyup添加到输入元素中,并将其设置为一个查看输入文本的函数,然后在moviebox div元素中循环并隐藏它们(如果h3元素文本不包含输入值) 例如:
<input type="text" id="filterInput" placeholder="Search..." onkeyup="filterTable(this)" />
function filterTable(input) {
var search = input.value;
var movieDivs = document.querySelectorAll('div.moviebox');
for (var i = 0; i < movieDivs.length; i++;) {
var h3 = movieDivs[i].querySelector('h3');
if (h3.innerText.indexOf(search) >= 0)
movieDivs[i].style.display = '';
else
movieDivs[i].style.display = 'none';
}
}
您必须实现一个筛选/搜索列表 有无数种方法可以解决这个问题,但我将在这里提出一个解决方案 下面是一个相关的示例,为了简单起见,所有的css/javascript代码都嵌入到一个html页面中
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
* {
box-sizing: border-box;
}
#myInput {
background-image: url('/css/searchicon.png');
background-position: 10px 12px;
background-repeat: no-repeat;
width: 100%;
font-size: 16px;
padding: 12px 20px 12px 40px;
border: 1px solid #ddd;
margin-bottom: 12px;
}
#myUL {
list-style-type: none;
padding: 0;
margin: 0;
}
#myUL li a {
border: 1px solid #ddd;
margin-top: -1px; /* Prevent double borders */
background-color: #f6f6f6;
padding: 12px;
text-decoration: none;
font-size: 18px;
color: black;
display: block
}
#myUL li a:hover:not(.header) {
background-color: #eee;
}
</style>
</head>
<body>
<h2>My Phonebook</h2>
<input type="text" id="myInput" onkeyup="myFunction()" placeholder="Search for names.." title="Type in a name">
<ul id="myUL">
<li><a href="#">Adele</a></li>
<li><a href="#">Agnes</a></li>
<li><a href="#">Billy</a></li>
<li><a href="#">Bob</a></li>
<li><a href="#">Calvin</a></li>
<li><a href="#">Christina</a></li>
<li><a href="#">Cindy</a></li>
</ul>
<script>
function myFunction() {
var input, filter, ul, li, a, i;
input = document.getElementById("myInput");
filter = input.value.toUpperCase();
ul = document.getElementById("myUL");
li = ul.getElementsByTagName("li");
for (i = 0; i < li.length; i++) {
a = li[i].getElementsByTagName("a")[0];
if (a.innerHTML.toUpperCase().indexOf(filter) > -1) {
li[i].style.display = "";
} else {
li[i].style.display = "none";
}
}
}
</script>
</body>
</html>
此实现使用for循环来循环列表中的所有项目,以搜索我们正在搜索的字符的位置:.indexOffilter并相应地显示/隐藏当前项目
几个基本概念结合在一起可以实现这样一个用户友好和强大的使用
作为第一件事,我建议您将这些功能单元分离在不同的文件中,完整地编写这些部分,并回答您阅读的任何问题、疑问或不清楚的信息
用手一个字母一个字母地在新文件中写代码。
阅读它,没有复制和粘贴
我宁愿提出建议而不是解决方案,因为你的主要要求似乎是你想学习。
一旦你可以反汇编/重新组装这段代码,它也将很容易在你的当前页面中实现
花时间,回答你自己的问题,开始一门课程,买书,永不放弃
玩得开心
此备选方案使用函数和
找出要素并进行必要的比较。
这种方法使用函数查找匹配项。
这种方法使用一个名为hide的类来隐藏与输入值不匹配的元素。
这种方法区分大小写。
使用事件捕获输入文本字段中的任何更改。
document.getElementById'filterInput'.addEventListener'input',函数{
var值=此值;
var container=document.getElementById'box';
Array.prototype.forEach.callcontainer.queryselectoral.moviebox',function{
e、 类列表。添加“隐藏”;
Array.prototype.forEach.calle.querySelectorAll'.namemovie',functionm{
如果value.trim===|| m.textContent.indexOfvalue!==-1 e.classList.删除“隐藏”;
};
}
}
.隐藏{
显示:无
}
莫夫布兰克
歼灭
类型:冒险、幻想
炸弹城体裁:动作、犯罪
通勤者类型:动作、戏剧
一些html: 结果: 为了确保搜索不区分大小写,可以按如下方式扩展jQuery:$.expr[":"].contains = $.expr.createPseudo(function(arg) {
return function( elem ) {
return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
};
});
最好的方法可能是将js库用作angular或react 但下面是vanila js使用oninput事件的一个简单示例: 莫夫布兰克 歼灭
类型:冒险、幻想
炸弹城体裁:动作、犯罪
通勤者类型:动作、戏剧
函数filterMoviesval{ val=val.toUpperCase; 让moviesboxs=document.getElementsByClassName'moviebox'; Array.prototype.forEach.CallMoviesBox,子项=>{ 设id=child.id.toUpperCase if!id.includeVal child.style.display=无; 否则{ child.style.display=块; } }; }这是我想到的。这是一个学习JS的好小项目!您应该尝试下一步,在给定一系列电影的情况下,自动创建html。这对你所做的可能有点沉重 ,但React是一个整洁的JS库,值得研究和学习。另外,使用。在他们里面。你通常不想那样做。看看你的容器类 //抓住所有的电影 让movies=document.getElementsByClassName'moviebox'; //这将返回一个我们需要数组的对象 //里面有所有的名字。因此,让我们调用OBject.keys,它将 //返回包含此对象所有键的数组 movies=Object.keysmovies .mapkey=>movies[key].id; //我们所做的是循环遍历键0,1,2,并用它们索引到对象中[key]。然后,由于hte id似乎是电影的名称,我们只需获取id movies[key].id,然后将此更新数组保存到已定义的movies数组中。 console.logmovies; //^看看吧,这里有电影列表,动态抓取! //让我们定义一个函数来隐藏给定名称的电影。 //这是一个超基本的函数,但有一点做得很好。 函数hideMoviename{ document.getElementByIdname.style.display='none'; console.loghide+名称 } //如果我们能隐藏一部电影,我们也希望能被缩写为放映一部。 函数showMoviename{ document.getElementByIdname.style.display='block'; } //现在让我们以输入框为目标 const searchBox=document.getElementById'filterInput'; //我们希望添加一个事件监听器,以便用户每次输入一些内容 //我们浏览电影并隐藏那些不包含字符串的 //进入后,我们还希望确保放映正确的电影 searchBox.addEventListener'input',=>{ const value=searchBox.value; const visibleMovies=[]; console.logvalue //让我们对电影进行过滤,使其仅包含我们要隐藏的电影 常量hiddenMovies=movies.filtermovie=>{ const hidden=movie.indexOfvalue<0; //如果我们不想把它藏起来,就让我们把它展示出来。 如果!隐藏{ 可视视频 } 返回隐藏; }; console.loghiddenMovies //循环并隐藏电影。 forlet i=0;i
体裁:动作、犯罪
通勤者类型:动作、戏剧
最近的javascript函数在这里吗?@AnthonyMcGrath是的,它是!欢迎来到stackoverflow!在这里提问之前,您应该对如何使用JavaScript实现这一点进行更多的研究。有许多关于使用JavaScript构建可搜索列表的教程,可以通过快速的谷歌搜索轻松找到。
$("#search").keyup(function() {
val = $.trim(this.value);
if (val === "") {
$('.movie').show();
} else {
$('.movie').hide();
$(".movie:contains(" + val + ")").show();
}
});
$.expr[":"].contains = $.expr.createPseudo(function(arg) {
return function( elem ) {
return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
};
});