Show/Hide 基于输入(搜索栏)值的 img 元素 Jquery
Show/Hide img elements based on input (search bar) value with Jquery
我有一个照片库网格,希望能够搜索 img 标签的 'data-title' 值并仅显示具有匹配数据的图像。因此,如果我输入 "hay",就会显示下面的图片,但是网站上所有 data-title 中没有 "hay" 的图片都会被隐藏。
<a href="photo_gallery\photos.jpg" data-lightbox="gallery" data-title
="Hay Bales - I love hay bales. Took this snap on a drive through the
countryside past some straw fields.">
<img src="photo_gallery\photos\thumbnails.jpg" alt="fields">
</a>
我修改了一些我在此处找到的有关如何隐藏 div 的代码,但无法完全使用它来搜索 data-title 属性。如果我在搜索框中输入任何内容,它会隐藏每张图片,无论 data-title 属性如何。
$('#search').keyup(function() {
var value = $(this).val();
var exp = new RegExp(value);
$('a').each(function() {
var isMatch = exp.test($('a[data-title='+value+']', this).text());
$(this).toggle(isMatch);
});
});
我哪里错了?这也是搜索栏的设置方式。
<div class="searchBar">
<input type="text" name="search" id="search" placeholder="Search">
</div>
由于您的锚标记没有文本节点,因此使用 JQuery .text() 方法将导致针对空字符串测试您的值。相反,定位元素的数据属性并将其用作正则表达式测试的主题。
$('#search').keyup(function() {
var value = $(this).val();
var exp = new RegExp(value);
$('a').each(function() {
var isMatch = exp.test($(this).data('title'));
$(this).toggle(isMatch);
});
});
另一个答案是完全删除 RegExp
,因为您正在使用 html5 数据集,如果需要,您可以直接比较这些值。
像这样:
我有一个照片库网格,希望能够搜索 img 标签的 'data-title' 值并仅显示具有匹配数据的图像。因此,如果我输入 "hay",就会显示下面的图片,但是网站上所有 data-title 中没有 "hay" 的图片都会被隐藏。
<a href="photo_gallery\photos.jpg" data-lightbox="gallery" data-title
="Hay Bales - I love hay bales. Took this snap on a drive through the
countryside past some straw fields.">
<img src="photo_gallery\photos\thumbnails.jpg" alt="fields">
</a>
我修改了一些我在此处找到的有关如何隐藏 div 的代码,但无法完全使用它来搜索 data-title 属性。如果我在搜索框中输入任何内容,它会隐藏每张图片,无论 data-title 属性如何。
$('#search').keyup(function() {
var value = $(this).val();
var exp = new RegExp(value);
$('a').each(function() {
var isMatch = exp.test($('a[data-title='+value+']', this).text());
$(this).toggle(isMatch);
});
});
我哪里错了?这也是搜索栏的设置方式。
<div class="searchBar">
<input type="text" name="search" id="search" placeholder="Search">
</div>
由于您的锚标记没有文本节点,因此使用 JQuery .text() 方法将导致针对空字符串测试您的值。相反,定位元素的数据属性并将其用作正则表达式测试的主题。
$('#search').keyup(function() {
var value = $(this).val();
var exp = new RegExp(value);
$('a').each(function() {
var isMatch = exp.test($(this).data('title'));
$(this).toggle(isMatch);
});
});
另一个答案是完全删除 RegExp
,因为您正在使用 html5 数据集,如果需要,您可以直接比较这些值。
像这样: