You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jekyll是否支持按多个标签搜索博客文章?

Jekyll多标签筛选文章的实现方式

Jekyll原生不支持多标签组合筛选的搜索功能,但可以通过以下两种方式实现需求:

1. 静态构建阶段预生成组合页面

在Jekyll构建时,用Liquid模板遍历标签的所有可能组合,为每个组合生成对应的文章列表页面。这种方式适合需要静态页面展示固定标签组合的场景,但标签数量较多时会生成大量页面,影响构建效率。

示例Liquid代码:

{% assign all_tags = site.tags | keys %}
{% for tag1 in all_tags %}
  {% for tag2 in all_tags offset:forloop.index %}
    {% assign combined_posts = site.posts | where_exp:"post", "post.tags contains tag1 and post.tags contains tag2" %}
    {% if combined_posts.size > 0 %}
      <h2>同时包含「{{ tag1 }}」和「{{ tag2 }}」的文章</h2>
      <ul>
        {% for post in combined_posts %}
          <li><a href="{{ post.url }}">{{ post.title }}</a></li>
        {% endfor %}
      </ul>
    {% endif %}
  {% endfor %}
{% endfor %}

2. 前端JavaScript动态筛选

在页面加载完成后,通过JavaScript获取文章的标签数据,监听用户的标签选择操作,实时筛选出同时包含所有选中标签的文章。这种方式更灵活,支持任意数量的标签组合,无需预生成额外页面。

示例代码(结合Liquid与JS):

<!-- 渲染文章列表,为每个文章添加标签数据属性 -->
{% for post in site.posts %}
  <article class="post-item" data-tags="{{ post.tags | join: ',' }}">
    <h3><a href="{{ post.url }}">{{ post.title }}</a></h3>
  </article>
{% endfor %}

<!-- 标签筛选按钮组 -->
<div class="tag-filters">
  {% for tag in site.tags %}
    <button class="tag-btn" data-tag="{{ tag[0] }}">{{ tag[0] }}</button>
  {% endfor %}
</div>

<script>
const tagButtons = document.querySelectorAll('.tag-btn');
const postItems = document.querySelectorAll('.post-item');
const selectedTags = new Set();

// 绑定标签按钮点击事件
tagButtons.forEach(btn => {
  btn.addEventListener('click', () => {
    const tag = btn.dataset.tag;
    if (selectedTags.has(tag)) {
      selectedTags.delete(tag);
      btn.classList.remove('active');
    } else {
      selectedTags.add(tag);
      btn.classList.add('active');
    }
    filterMatchingPosts();
  });
});

// 筛选符合条件的文章
function filterMatchingPosts() {
  postItems.forEach(post => {
    const postTags = post.dataset.tags.split(',');
    const isMatch = [...selectedTags].every(tag => postTags.includes(tag));
    post.style.display = isMatch ? 'block' : 'none';
  });
}
</script>

如果需要更复杂的搜索能力,也可以集成第三方静态搜索工具,但Jekyll本身没有内置多标签筛选的原生功能。

内容的提问来源于stack exchange,提问作者An Ignorant Wanderer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 04:40:37