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

如何为每个.panel的.panel-heading::before设置对应span首字母

修正多面板首字母伪元素内容的问题

原代码的问题在于,直接通过$(".panel .panel-title a span").text()获取文本时,jQuery只会返回第一个匹配元素的文本内容,接着用$(".panel-heading").attr('data-before', first_letter)把这个首字母批量设置给所有面板标题,导致所有伪元素内容完全一致。

要实现每个面板对应自己的首字母,需要逐个遍历处理每个.panel元素:

修正后的JavaScript代码

(function($) {
  // 遍历页面上的每个.panel元素
  $(".panel").each(function() {
    // 获取当前面板内span的文本内容
    var text = $(this).find(".panel-title a span").text();
    // 提取文本的首字母
    var first_letter = text.charAt(0);
    // 给当前面板的.panel-heading设置对应的data-before属性
    $(this).find(".panel-heading").attr('data-before', first_letter);
  });
})(jQuery);

说明

  • 使用.each()遍历每个面板,确保每个面板独立处理,不会互相干扰
  • 通过$(this)定位当前遍历的面板,再用.find()查找该面板内的子元素,避免跨面板的选择错误
  • 可选优化:如果存在span文本为空的情况,可以添加判断避免空字符显示:
    var first_letter = text.trim() ? text.trim().charAt(0) : '';
    

原CSS和HTML代码(无需修改)

CSS

.panel-heading:before {
  content: attr(data-before);
  left: -25px;
  top: 6px;
  display: inline-block;
  position: absolute;
  height: 45px;
  width: 47px;
  z-index: 9999;
}

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="panel">
  <div class="panel-heading">
    <p class="panel-title">
      <a href="#aa1">
        <span>Piece rate work</span>
      </a>
    </p>
  </div>
</div>
<div class="panel">
  <div class="panel-heading">
    <p class="panel-title">
      <a href="#aa1">
        <span>Another Letter Here</span>
      </a>
    </p>
  </div>
</div>
<div class="panel">
  <div class="panel-heading">
    <p class="panel-title">
      <a href="#aa1">
        <span>More Letters Here</span>
      </a>
    </p>
  </div>
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:19:52