javascript - 如何使用 jQuery 为带有标题的图像链接创建搜索脚本
问题描述
我正在尝试使用 jQuery 创建搜索脚本。我试图让搜索框根据它们各自的标题过滤照片,并且应该在您键入时实时过滤照片,并且显示的照片应该与搜索匹配。这是我的 HTML 和 Javascript 代码:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Photo Gallery</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="js/lightbox/css/lightbox.css">
<link href="https://fonts.googleapis.com/css?family=Roboto+Mono&display=swap" rel="stylesheet">
<link rel="stylesheet" href="css/main.css">
</head>
<body>
<div class=container>
<!-- <form action="form-field"> -->
<input type="search" id="site-search" placeholder="Search(16pt)">
<!-- </form> -->
<div class="images-container">
<a href= "photos/01.jpg" data-alt="Hay Bales"data-lightbox="image-1" data-title="I love hay bales. Took this snap on a drive through the countryside past some straw fields."><img src="photos/thumbnails/01.jpg" alt="Image 1"></a>
<a href= "photos/02.jpg" data-alt ="Lake"data-lightbox="image-1" data-title="The lake was so calm today. We had a great view of the snow on the mountains from here."><img src="photos/thumbnails/02.jpg" alt="Image 2"></a>
<a href= "photos/03.jpg" data-alt="Canyon"data-lightbox="image-1" data-title="I hiked to the top of the mountain and got this picture of the canyon and trees below."><img src="photos/thumbnails/03.jpg" alt="Image 3"></a>
<a href= "photos/04.jpg" data-alt="Iceberg"data-lightbox="image-1" data-title="It was amazing to see an iceberg up close, it was so cold but didn’t snow today. "><img src="photos/thumbnails/04.jpg" alt="Image 4"></a>
<a href= "photos/05.jpg" data-alt="Desert"data-lightbox="image-1" data-title="The red cliffs were beautiful. It was really hot in the desert but we did a lot of walking through the canyons."><img src="photos/thumbnails/05.jpg" alt="Image 5"></a>
<a href= "photos/06.jpg" data-alt="Fall"data-lightbox="image-1" data-title="Fall is coming, I love when the leaves on the trees start to change color."><img src="photos/thumbnails/06.jpg" alt="Image 6"></a>
<a href= "photos/07.jpg" data-alt="Plantation"data-lightbox="image-1" data-title="I drove past this plantation yesterday, everything is so green!"><img src="photos/thumbnails/07.jpg" alt="Image 7"></a>
<a href= "photos/08.jpg" data-alt="Dunes"data-lightbox="image-1" data-title="My summer vacation to the Oregon Coast. I love the sandy dunes!"><img src="photos/thumbnails/08.jpg" alt="Image 8"></a>
<a href= "photos/09.jpg" data-alt="Countryside Lane"data-lightbox="image-1" data-title="We enjoyed a quiet stroll down this countryside lane."><img src="photos/thumbnails/09.jpg" alt="Image 9"></a>
<a href= "photos/10.jpg" data-alt="Sunset"data-lightbox="image-1" data-title="Sunset at the coast! The sky turned a lovely shade of orange."><img src="photos/thumbnails/10.jpg" alt="Image 10"></a>
<a href= "photos/11.jpg" data-alt="Cave"data-lightbox="image-1" data-title="I did a tour of a cave today and the view of the landscape below was breathtaking."><img src="photos/thumbnails/11.jpg" alt="Image 11"></a>
<a href= "photos/12.jpg" data-alt="Blueballs"data-lightbox="image-1" data-title="I walked through this meadow of bluebells and got a good view of the snow on the mountain before the fog came in."><img src="photos/thumbnails/12.jpg" alt="Image 12"></a>
</div>
</div>
<script src="js/jquery-3.4.1.min.js"></script>
<script src="js/lightbox/js/lightbox-plus-jquery.min.js"></script>
<script src="js/main.js"></script>
</body>
</html>
$("#site-search").keyup(function() {
let searchInput=$("#site-search").val().toLowerCase();
$('a').each(function(element){
let caption=$(element).attr('data-title').toLowerCase();
if (caption.includes(searchInput)) {
$(element).show();
}
});
});
出于某种原因,我收到一条错误消息,指出 toLowercase 未定义。这是为什么?你们能对我的代码提出建议以修复错误吗?我有点卡住了,不知道我是否在正确的轨道上。
解决方案
的第一个参数each
不是对象。它是索引。您可以使用this
(或添加第二个参数)而不是element
变量。
$("#site-search").keyup(function() {
let searchInput = $("#site-search").val().toLowerCase();
$('.images-container > a').each(function(index, element) {
let caption = $(element).attr('data-title').toLowerCase();
if (caption.includes(searchInput)) {
$(element).show();
} else {
$(element).hide(); //Hide elements that dont include the search word.
}
});
});
$("#site-search").keyup(function() {
let searchInput = $("#site-search").val().toLowerCase();
$('.images-container > a').each(function(index, element) {
let caption = $(element).attr('data-title').toLowerCase();
if (caption.includes(searchInput)) {
$(element).show();
} else {
$(element).hide(); //Hide elements that dont include the search word.
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="search" id="site-search" placeholder="Search(16pt)">
<div class="images-container">
<a href="photos/01.jpg" data-alt="Hay Bales" data-lightbox="image-1" data-title="I love hay bales. Took this snap on a drive through the countryside past some straw fields."><img src="photos/thumbnails/01.jpg" alt="Image 1"></a>
<a href="photos/02.jpg" data-alt="Lake" data-lightbox="image-1" data-title="The lake was so calm today. We had a great view of the snow on the mountains from here."><img src="photos/thumbnails/02.jpg" alt="Image 2"></a>
<a href="photos/03.jpg" data-alt="Canyon" data-lightbox="image-1" data-title="I hiked to the top of the mountain and got this picture of the canyon and trees below."><img src="photos/thumbnails/03.jpg" alt="Image 3"></a>
<a href="photos/04.jpg" data-alt="Iceberg" data-lightbox="image-1" data-title="It was amazing to see an iceberg up close, it was so cold but didn’t snow today. "><img src="photos/thumbnails/04.jpg" alt="Image 4"></a>
<a href="photos/05.jpg" data-alt="Desert" data-lightbox="image-1" data-title="The red cliffs were beautiful. It was really hot in the desert but we did a lot of walking through the canyons."><img src="photos/thumbnails/05.jpg" alt="Image 5"></a>
<a href="photos/06.jpg" data-alt="Fall" data-lightbox="image-1" data-title="Fall is coming, I love when the leaves on the trees start to change color."><img src="photos/thumbnails/06.jpg" alt="Image 6"></a>
<a href="photos/07.jpg" data-alt="Plantation" data-lightbox="image-1" data-title="I drove past this plantation yesterday, everything is so green!"><img src="photos/thumbnails/07.jpg" alt="Image 7"></a>
<a href="photos/08.jpg" data-alt="Dunes" data-lightbox="image-1" data-title="My summer vacation to the Oregon Coast. I love the sandy dunes!"><img src="photos/thumbnails/08.jpg" alt="Image 8"></a>
<a href="photos/09.jpg" data-alt="Countryside Lane" data-lightbox="image-1" data-title="We enjoyed a quiet stroll down this countryside lane."><img src="photos/thumbnails/09.jpg" alt="Image 9"></a>
<a href="photos/10.jpg" data-alt="Sunset" data-lightbox="image-1" data-title="Sunset at the coast! The sky turned a lovely shade of orange."><img src="photos/thumbnails/10.jpg" alt="Image 10"></a>
<a href="photos/11.jpg" data-alt="Cave" data-lightbox="image-1" data-title="I did a tour of a cave today and the view of the landscape below was breathtaking."><img src="photos/thumbnails/11.jpg" alt="Image 11"></a>
<a href="photos/12.jpg" data-alt="Blueballs" data-lightbox="image-1" data-title="I walked through this meadow of bluebells and got a good view of the snow on the mountain before the fog came in."><img src="photos/thumbnails/12.jpg" alt="Image 12"></a>
</div>
选项2:或者您可以使用filter
过滤a
元素,例如:
$("#site-search").keyup(function() {
let searchInput = $("#site-search").val().toLowerCase();
$('.images-container > a').hide().filter(function() {
return $(this).attr('data-title').toLowerCase().includes(searchInput);
}).show();
});
$("#site-search").keyup(function() {
let searchInput = $("#site-search").val().toLowerCase();
$('.images-container > a').hide().filter(function() {
return $(this).attr('data-title').toLowerCase().includes(searchInput);
}).show();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="search" id="site-search" placeholder="Search(16pt)">
<div class="images-container">
<a href="photos/01.jpg" data-alt="Hay Bales" data-lightbox="image-1" data-title="I love hay bales. Took this snap on a drive through the countryside past some straw fields."><img src="photos/thumbnails/01.jpg" alt="Image 1"></a>
<a href="photos/02.jpg" data-alt="Lake" data-lightbox="image-1" data-title="The lake was so calm today. We had a great view of the snow on the mountains from here."><img src="photos/thumbnails/02.jpg" alt="Image 2"></a>
<a href="photos/03.jpg" data-alt="Canyon" data-lightbox="image-1" data-title="I hiked to the top of the mountain and got this picture of the canyon and trees below."><img src="photos/thumbnails/03.jpg" alt="Image 3"></a>
<a href="photos/04.jpg" data-alt="Iceberg" data-lightbox="image-1" data-title="It was amazing to see an iceberg up close, it was so cold but didn’t snow today. "><img src="photos/thumbnails/04.jpg" alt="Image 4"></a>
<a href="photos/05.jpg" data-alt="Desert" data-lightbox="image-1" data-title="The red cliffs were beautiful. It was really hot in the desert but we did a lot of walking through the canyons."><img src="photos/thumbnails/05.jpg" alt="Image 5"></a>
<a href="photos/06.jpg" data-alt="Fall" data-lightbox="image-1" data-title="Fall is coming, I love when the leaves on the trees start to change color."><img src="photos/thumbnails/06.jpg" alt="Image 6"></a>
<a href="photos/07.jpg" data-alt="Plantation" data-lightbox="image-1" data-title="I drove past this plantation yesterday, everything is so green!"><img src="photos/thumbnails/07.jpg" alt="Image 7"></a>
<a href="photos/08.jpg" data-alt="Dunes" data-lightbox="image-1" data-title="My summer vacation to the Oregon Coast. I love the sandy dunes!"><img src="photos/thumbnails/08.jpg" alt="Image 8"></a>
<a href="photos/09.jpg" data-alt="Countryside Lane" data-lightbox="image-1" data-title="We enjoyed a quiet stroll down this countryside lane."><img src="photos/thumbnails/09.jpg" alt="Image 9"></a>
<a href="photos/10.jpg" data-alt="Sunset" data-lightbox="image-1" data-title="Sunset at the coast! The sky turned a lovely shade of orange."><img src="photos/thumbnails/10.jpg" alt="Image 10"></a>
<a href="photos/11.jpg" data-alt="Cave" data-lightbox="image-1" data-title="I did a tour of a cave today and the view of the landscape below was breathtaking."><img src="photos/thumbnails/11.jpg" alt="Image 11"></a>
<a href="photos/12.jpg" data-alt="Blueballs" data-lightbox="image-1" data-title="I walked through this meadow of bluebells and got a good view of the snow on the mountain before the fog came in."><img src="photos/thumbnails/12.jpg" alt="Image 12"></a>
</div>
推荐阅读
- jquery - 根据 jQuery 在对象中写入的属性,将生成的元素从 Object 中放入正确的 div
- java - 在 Windows 7 中,Java 中的打印无法完成
- java - 如何从我的代码中的照片中删除喜欢
- c++ - 在存在同名成员函数的情况下成员函数模板的类定义 - 编译器分歧
- javascript - 当我调整浏览器大小时,react-slick 幻灯片的宽度不会改变
- git - 切换到 master 并返回到工作分支显示在 Git 中修改的文件
- php - 为什么 ODBC 插入 sql server 时不支持法语重音词?
- ios - Textview 将 UIImageView 限制在 View 之外
- java - 如何从 Eclipse 嵌入式 tomcat 服务器中的自动发布中排除观看的资源
- rust - 为什么编译器阻止我在使用 collect() 创建的 Vec 上使用 push?