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

如何在CSS选择器中使用属性选择器或通配符匹配动态变化的类名

解决动态JSS类名导致CSS选择器失效的问题

我太懂这种困扰了——Material UI自动生成的jssXXX类名每次刷新都会变,直接复制Chrome检查器的选择器根本没法用!结合你的需求,这里有几个靠谱的解决方案:

1. 用稳定的Material UI类名构建选择器

动态的jssXXX是框架额外生成的,元素本身的核心类(比如MuiDrawer-root、MuiListItem-root这些)是不会变化的。我们可以直接忽略动态类,只保留稳定的类来写选择器:

#root > div > div > div.MuiDrawer-root.MuiDrawer-docked > div > div > div > li.MuiListItem-root.MuiListItem-gutters > div.MuiListItemText-root > span.MuiListItemText-primary

这个选择器会跳过那些动态变化的jssXXX类,只匹配带有稳定Material UI类的元素,完全不受页面刷新影响。

2. 结合属性选择器精准匹配目标span

你之前用[class|="..."]的思路方向对,但语法选错了——这个操作符是匹配以指定值开头且用连字符分隔的属性值,不适合多类名的场景。正确的做法是用~=操作符匹配单个独立类(空格分隔的单词),或者叠加多个属性选择器:

精准匹配多个固定类

span[class~="MuiTypography-root"][class~="MuiListItemText-primary"][class~="MuiTypography-body1"]

这个选择器会匹配同时包含这三个固定类的span元素,完全不受其他动态类干扰。

直接匹配目标文本(JavaScript场景)

如果是用JavaScript的querySelector,原生CSS暂时没有文本匹配的伪类,但可以通过遍历元素来筛选:

// 先找到所有符合基础类的span,再筛选文本匹配的
const targetElement = Array.from(document.querySelectorAll('span.MuiListItemText-primary'))
  .find(el => el.textContent.trim() === 'THIS IS MY NAME');

这种方法最直接,哪怕页面结构有小调整,只要目标文本不变就能准确定位。

3. 简化选择器(工具场景适用)

如果是在Playwright、Puppeteer这类自动化工具中使用,可以用扩展的文本匹配选择器,写法非常简洁:

span.MuiListItemText-primary:has-text("THIS IS MY NAME")

注意这个语法是工具扩展的,原生CSS暂时不支持,但在自动化测试场景下特别实用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 08:27:38