jQuery:Show/hide 项使用 URL 哈希/片段标识符
jQuery: Show/hide items using URL hash / fragment identifier
我有一个基本的 jQuery 单击功能,可以根据 data-filter
属性点击 shows/hides 项目——不使用像 Isotope 这样的插件,只是一个简单的 show/hide 功能——并且我还想使用 URL 散列 应用过滤器(如果存在),并将 'active' class 附加到相应的过滤器按钮.
在标记中,有一个带有 'item' class 的 div 网格,每个 div 包含 anchor
个具有相关 data-filter
的元素,如下所示:
<div class="item">
<a href="#" class="item-anchor" data-filter="apples">Item</a>
</div>
在我下面的方法中,我试图获取 URL 散列,隐藏其锚点与散列字符串不匹配的所有元素,并将活动的 class 附加到匹配的 .filter-button
元素:
$(window).load(function () {
var hash = window.location.hash.substring(1);
if (hash) {
$('.item').each(function() {
$(this).children('.item-anchor').data('filter') !== hash;
}).hide();
$('a.filter-button[href="hash"]').addClass('active');
}
});
我从 this thread 那里得到了一些帮助,但我的情况有点不同。有趣的是,上面的代码导致 all .item
div 隐藏并且 .active
class 没有按需要附加,所以我不知道我哪里错了。非常感谢任何帮助,如果需要进一步说明,请告诉我。
您应该调用 filter 函数,而不是 each 函数。此外,您需要 return 我们应该根据其进行过滤的布尔值。我不太确定你的 link .active 做了什么,但我很确定你想通过哈希过滤它。
$(window).load(function () {
var hash = window.location.hash.substring(1);
if (hash) {
$('.item').filter(function() {
return $(this).children('.item-anchor').data('filter') !== hash;
}).hide();
$('a.filter-button[href="#'+hash+'"]').addClass('active');
}
});
我有一个基本的 jQuery 单击功能,可以根据 data-filter
属性点击 shows/hides 项目——不使用像 Isotope 这样的插件,只是一个简单的 show/hide 功能——并且我还想使用 URL 散列 应用过滤器(如果存在),并将 'active' class 附加到相应的过滤器按钮.
在标记中,有一个带有 'item' class 的 div 网格,每个 div 包含 anchor
个具有相关 data-filter
的元素,如下所示:
<div class="item">
<a href="#" class="item-anchor" data-filter="apples">Item</a>
</div>
在我下面的方法中,我试图获取 URL 散列,隐藏其锚点与散列字符串不匹配的所有元素,并将活动的 class 附加到匹配的 .filter-button
元素:
$(window).load(function () {
var hash = window.location.hash.substring(1);
if (hash) {
$('.item').each(function() {
$(this).children('.item-anchor').data('filter') !== hash;
}).hide();
$('a.filter-button[href="hash"]').addClass('active');
}
});
我从 this thread 那里得到了一些帮助,但我的情况有点不同。有趣的是,上面的代码导致 all .item
div 隐藏并且 .active
class 没有按需要附加,所以我不知道我哪里错了。非常感谢任何帮助,如果需要进一步说明,请告诉我。
您应该调用 filter 函数,而不是 each 函数。此外,您需要 return 我们应该根据其进行过滤的布尔值。我不太确定你的 link .active 做了什么,但我很确定你想通过哈希过滤它。
$(window).load(function () {
var hash = window.location.hash.substring(1);
if (hash) {
$('.item').filter(function() {
return $(this).children('.item-anchor').data('filter') !== hash;
}).hide();
$('a.filter-button[href="#'+hash+'"]').addClass('active');
}
});