【问题标题】:Javascript Search function to highlight imageJavascript 搜索功能以突出显示图像
【发布时间】:2013-07-19 12:41:25
【问题描述】:

我在一个网站上有 100 张图片,我希望能够在搜索框中搜索图片的文件名。之后,图像在找到时突出显示。文件命名为 0-1.png、0-2.png 等。因此,如果我键入 0-1 以突出显示图像 0-1.png。这是我目前所拥有的。

<form  action='' method='get'>
<input type="text" name="search" size="3" maxlength="3">
<input type="submit" value="search">
</form>

如何创建 Javascript 函数来搜索图像并突出显示它? 图像也存储在images/0-1.png之类的路径中

【问题讨论】:

  • 这听起来像是你应该使用 Javascript 的东西。如果图像已经在显示并且您只想突出显示它,那么绝对没有理由向服务器发出新请求。
  • 是的,这就是我真正想问的问题,什么是最好的。我对搜索功能一无所知。谢谢,我现在可以编辑这个问题了。
  • 如果图片的文件名是你提到的,那么&lt;img&gt;标签的src属性会包含这些文件名还是包含/images/public/0-1.png之类的东西?有点路径,然后是文件名??
  • 是的,他们在images/0-1.png

标签: javascript html


【解决方案1】:

这样的事情可能对你有用:

<input type="text" id="search" />
<div id="images">
  <img src="0-1.png" />
  <img src="0-2.png" />
  ...
</div>
<script>
  (function(){
    var input = document.getElementById('search');
    var images = document.getElementById('images').getElementsByTagName('img');

    input.onkeyup = function(){
      for(var i = images.length; i--;){
          images[i].className = 
            images[i].src.indexOf(this.value) > 0 ?
            'highlight' :
            '';
      }       
   };
 })();
</script>

在你的 CSS 中加入这个:

img.highlight {
    border: 5px solid #F0F;
    margin: -5px;
}

JsFiddle (with broken images)

【讨论】:

  • 如果我的图像存储在路径 images/0-1.png 而不是 0-1.png
  • @srtstripes 我的代码只是进行基本的子字符串搜索,所以它仍然会搜索。基本上,它将突出显示input 中的当前值是src 属性的子字符串的所有图像。如果您只是在框中输入images,它将突出显示所有内容。如果你只输入 0-1 它会突出显示 images/0-1.pngimages/0-11.png
  • 别管它的工作了。我的 div 被称为别的东西。谢谢
  • @srtstripes 不客气,我希望你可以根据自己的喜好调整它。如果您对此有任何小问题,请随时在此处再次发表评论。如果您有一个可以使用完整答案的问题,那么您不妨将其作为一个单独的问题提出。祝你好运!
  • 我想问是否可以更改onkeyup功能。我希望它在将 3 个键输入搜索字段后运行,因为 3 是搜索的最大长度。原因是因为当我输入 1 个键并弄乱了图像的 css 编码时,所有图像都发生了变化。你可以在这里看到为什么。 jsfiddle.net/FZYgP/2
【解决方案2】:

将 id="search" 添加到您的输入 name="search" 文本框。包括 jQuery。在您的 head 语句中添加以下代码。放下搜索按钮

<script>
$(function() { 
    $('#search').keyup(function() {
        $('img')                     
            .removeClass('highlight')
            .filter('img[src*="'+$(this).val()+'"]')
            .addClass('highlight'); 
    });
});
</script>

CSS:

img { border: 3px solid transparent; }
img.highlight { border-color: yellow; }

http://jsfiddle.net/fstreamz/8kCxw/3/

【讨论】:

  • 是的,这正是我需要的。我如何包含 jquery
  • 如果我的图像存储在images/0-1.png路径中会有什么影响
  • 选择 Paulpro 作为答案。他不需要 jquery。
  • @LUKE 你的答案可能仍然是最好的,如果它对 OP 更有用的话。如果他想尝试学习 jQuery,这对他也可能非常有益。不过,我建议您在边框旁边设置一个-3px 边距,以使图像在被选中时不会移动(也不会导致它们周围的元素移动)。跨度>
  • 我并不太关心这些细节。只是给他举个例子。如果有一堆匹配的图像,他可能会更好地隐藏所有匹配的图像。我会更新我的答案以供将来窥视。
猜你喜欢
  • 2019-01-20
  • 1970-01-01
  • 2019-02-01
  • 2011-09-18
  • 2023-03-06
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
相关资源
最近更新 更多