【问题标题】:How to create a search script for image links with captions using jQuery如何使用 jQuery 为带有标题的图像链接创建搜索脚本
【发布时间】:2019-10-27 13:44:02
【问题描述】:

我正在尝试使用 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 未定义。这是为什么?你们能对我的代码提出建议以修复错误吗?我有点卡住了,不知道我是否走在正确的轨道上。

【问题讨论】:

    标签: javascript jquery error-handling event-handling


    【解决方案1】:

    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>

    【讨论】:

    • 所以当我尝试放置(function(index,element)时,仍然报错。这是为什么呢?
    • 您遇到什么错误?我没有收到任何错误,但它不起作用,因为你没有隐藏任何东西。您还需要隐藏不是结果的a
    • ibb.co/6bYmLXq 例如,当我在搜索中输入内容时,它告诉我“无法读取未定义的属性“toLowerCase””。我的代码中未定义什么?
    • 嗯,看看代码实际上做了它应该做的,但控制台显示错误哈哈。
    • 关闭浏览器再打开 :)
    猜你喜欢
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 2012-02-11
    相关资源
    最近更新 更多