[attr="value"]是唯一真正精确匹配的写法,要求属性值大小写、空格、内容一字不差;其余如[~="val"]、[*="val"]均为模糊匹配,仅[="value"]支持字面级严格比对。

[attr="value"] 是唯一真正精确匹配的写法
它不是“差不多就行”,而是字面级严格比对:大小写、空格、引号内内容必须完全一致。哪怕 data-id=" 123 " 多一个首尾空格,[data-id="123"] 就不会命中。
-
input[type="submit"]只匹配<input type="submit">,不匹配type="Submit"或type="submit-primary" -
img[alt="logo"]不会匹配alt="logo icon"(含空格)或alt="main-logo"(含连字符) - 引号类型不影响匹配——
href='https://a.com'仍可被[href="https://a.com"]选中,但引号内字符串必须一字不差 - HTML 标准模式下区分大小写:
[lang="EN"]≠[lang="en"];如需忽略,用[lang="en" i](IE 不支持)
[attr~="val"] 不是精确匹配,只适用于空格分隔场景
它把属性值按空白符(空格、换行、制表符)切开后,再逐个全等比对。所以它只适合 class、rel、data-tags 这类明确设计为多值空格分隔的属性。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
-
[class~="btn"]✅ 匹配class="btn primary"、class="large btn small" -
[class~="btn"]❌ 不匹配class="btn-primary"(连字符不是分隔符) -
[type~="submit"]语法合法,但等价于[type="submit"],无实际增益,别误以为它能“模糊容错” - 对自定义属性如
data-roles="admin editor",可用[data-roles~="admin"],但前提是值由空格分隔且无额外空格
^=、$=、*= 都不是精确匹配,容易误用
这三个操作符属于子串/边界匹配,常被当成“精确”用,结果漏选或误选。
-
[href^="https://"]要求整个 href 值以https://开头,https:或https//都不匹配 -
[src$=".webp"]要求严格以.webp结尾,.webp?v=1因含?不匹配 -
[data-id*="user-"]只要字符串中出现user-就命中,data-id="admin-user-456"也会被选中 -
[class^="btn"]很少有用——class="btn btn-lg"虽以btn开头,但class="primary-btn"就不匹配,不如直接用.btn类选择器
真正难的不是选择器,是属性值本身
CSS 层面无法处理不可见字符:BOM、零宽空格、全角空格、多余换行等。这类问题选择器无能为力,必须靠 JS 清洗或服务端规范输出。
- 动态设置属性时记得
el.setAttribute('data-id', id.trim()) - 模板渲染中避免拼接空格,比如不要
class="{{ base }} {{ modifier }}",而用class="{{ base + ' ' + modifier }}"并确保两端无空 - DevTools 中右键「Edit as HTML」查看真实属性值,比猜更可靠
- 如果发现
[data-status="done"]不生效,先检查元素上真实的data-status值是不是"done "或" done"(带 Unicode 空格)
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










