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

Jekyll标签列表不区分大小写排序问题及代码咨询

解决Jekyll标签不区分大小写排序的问题

嘿,这个不区分大小写的标签排序问题我之前也碰到过,给你两种方案,根据你的Jekyll版本来选就好!

方案一:适合Jekyll 3.0+(推荐)

Jekyll 3.0及以上版本的sort过滤器支持case_insensitive参数,直接用这个就能轻松实现不区分大小写排序,代码简洁又直观:

<ul>
  {% assign sorted_tags = site.tags | sort:0 case_insensitive: true %}
  {% for tag in sorted_tags %}
    {% capture tag_name %}{{ tag[0] }}{% endcapture %}
    <li>
      <a href="#{{ tag_name | cgi_escape }}" class="tag">
        {{ tag_name }} <span>({{ tag[1].size }})</span>
      </a>
    </li>
  {% endfor %}
</ul>

代码说明:

  • site.tags | sort:0 case_insensitive: true:site.tags是一个哈希集合,每个元素是[标签名, 对应文章数组]。sort:0指定按哈希的第一个元素(也就是标签名)排序,case_insensitive: true开启不区分大小写模式,这样"CSS"和"css"会被视为同一排序项,最终按自然字母顺序排列(比如accessibility → CSS → JavaScript)。
  • 循环sorted_tags时,tag[0]保留标签原本的大小写显示,tag[1].size直接获取该标签下的文章数量,不用额外处理。

方案二:适合Jekyll 3.0以下版本

如果你的Jekyll版本比较老,不支持case_insensitive参数,可以手动通过转换小写来实现排序:

<ul>
  {% capture tag_list %}{% for tag in site.tags %}{{ tag[0] | downcase }}|{{ tag[0] }}{% endfor %}{% endcapture %}
  {% assign tag_words = tag_list | split:'|' | sort %}
  
  {% for item in (0..tag_words.size) step 2 %}
    {% unless forloop.last %}
      {% capture this_word %}{{ tag_words[item+1] }}{% endcapture %}
      <li>
        <a href="#{{ this_word | cgi_escape }}" class="tag">
          {{ this_word }} <span>({{ site.tags[this_word].size }})</span>
        </a>
      </li>
    {% endunless %}
  {% endfor %}
</ul>

代码说明:

  • 先把每个标签转换成「小写标签名|原标签名」的格式,拼接成字符串后分割成数组,再对数组排序(此时排序是基于小写标签名,实现不区分大小写)。
  • 最后按step 2循环数组,取出原标签名来显示,同时获取对应的文章数量。

内容的提问来源于stack exchange,提问作者Matt Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:46:27