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

如何找到类名包含选中元素类名子串的最近兄弟元素?

提取分组类名并隐藏对应底部元素

问题场景

现有如下DOM结构:

<li class="header group1"></li>
<li class="group1"></li>
<li class="group1"></li>
<li class="group1bottom"></li>

<li class="header group2"></li>
<li class="group2"></li>
<li class="group2"></li>
<li class="group2bottom"></li>

.. and so on

已通过以下代码获取所有header元素:

let headers = $('.header');

需要遍历每个header元素,提取其中groupX格式的类名,然后匹配对应的groupXbottom元素并隐藏。尝试使用$(this).classList[0]结合正则提取类名未得到正确结果,求解决方法。

解决方案

错误原因

$(this)是jQuery包装后的对象,不存在原生DOM的classList属性,直接调用会报错。要访问原生属性,需使用this.classList(原生DOM元素),或者用jQuery方法获取类名。

方法一:原生classList结合查找

这种方法不依赖类名顺序,更可靠:

headers.each(function() {
  // 获取当前header的所有类名集合
  const classList = this.classList;
  // 筛选出以group开头的类名
  const groupClass = Array.from(classList).find(cls => cls.startsWith('group'));
  
  if (groupClass) {
    // 拼接目标类名并隐藏元素
    $(`.${groupClass}bottom`).hide();
  }
});

方法二:jQuery类名字符串结合正则提取

如果确定类名格式固定,也可以用正则匹配:

headers.each(function() {
  // 获取所有类名字符串
  const classStr = $(this).attr('class');
  // 匹配group后跟数字的类名
  const groupMatch = classStr.match(/group\d+/);
  
  if (groupMatch) {
    $(`.${groupMatch[0]}bottom`).hide();
  }
});

说明

之前用classList[0]失败,大概率是因为类名顺序中第一个是header而非groupX,所以通过find或正则匹配的方式,能精准定位到目标分组类名,避免顺序影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 22:00:53