惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
IT之家
IT之家
爱范儿
爱范儿
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园_首页
Blog — PlanetScale
Blog — PlanetScale
V
Visual Studio Blog
云风的 BLOG
云风的 BLOG
MyScale Blog
MyScale Blog
阮一峰的网络日志
阮一峰的网络日志
Stack Overflow Blog
Stack Overflow Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
GbyAI
GbyAI
V
V2EX
N
Netflix TechBlog - Medium
Vercel News
Vercel News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
The Blog of Author Tim Ferriss
量子位
博客园 - Franky
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
月光博客
月光博客
F
Fortinet All Blogs

Mengke's blog - Mengke's coding journey

年轻不是健康的免死金牌 深圳工作机会,前端 2025 年终总结 Skill 不是 MCP 的替代品:我理解的渐进式披露与选型原则 独立开发者如何开具发票 香港银行卡开户完整指南(2025年9月最新) 招商银行储蓄卡微信动账提醒恢复方法 再谈 MCP - Model Context Protocol(MCP)详解和开发教程 Get Human-Readable "Time Ago" in TypeScript 以「asset-price-mcp」为例,从 0 开发 MCP Server Model Context Protocol (MCP) 快速开始 DeepSeek + Dify 搭建本地知识库 An elegant solution for implementing optional property types using TypeScript 2024 年终总结 Quickly Create a Fullscreen WebView with Autoplay Support for Testing String casing utilities in JavaScript Check if a string is a valid color Simple Event-Emitter/PubSub pattern Find which process is running on a certain port and kill it Markdown Code block's basic and advanced syntaxes Common npm commands to use locally Pnpm aliases How to safely rename a case sensitive file/directory in a git repo? A custom hooks to use an async effect A custom hooks to use local storage state 🤩 Mengke'blog 上线的这一年 🗼 五月底去了一趟日本,记录一下我的游记和攻略 网站性能优化:如何高效预加载大型静态资源 闰年之约 - 2024年2月29日 A collection of some useful websites
以数字开头的 ID 在 querySelector 中的处理
Mengke · 2024-10-23 · via Mengke's blog - Mengke's coding journey

Mengke's blog

Alex moliski cYM8Y3etmg unsplash.webp

Published on
/

3 mins read

/

––– views

Share:

在HTML5中,使用数字作为ID是合法的,但这种做法在实践中可能会带来一些意想不到的问题。例如:

虽然你可以使用 getElementById 轻松访问这些ID,但如果你尝试使用 querySelector 来选择这些元素,将会抛出一个 SyntaxError: DOM Exception 12 错误。这是因为虽然数字ID在HTML5中是有效的,但在CSS中它们是无效的,而 querySelector 正是基于CSS选择器工作的。

问题描述

当你尝试执行以下代码时,就会遇到问题:

这是因为CSS选择器不支持以数字开头的ID选择器。

解决方案

1. 使用有意义的ID

最佳实践是避免使用数字作为ID,而是使用更有意义的命名,比如 message1item2。这样可以避免大多数与数字ID相关的问题。

2. 使用 getElementById

最直接的解决方案是使用 getElementById 方法,这是专门为ID设计的DOM方法,可以直接处理数字ID:

这种方法简单且高效,不需要任何转义或额外的步骤。

3. 使用CSS转义

如果你必须使用数字ID,可以通过 CSS 转义来解决这个问题。例如,字符 1 的 Unicode 代码点是 U+0031,可以这样转义:

在JavaScript中,你可以这样使用:

4. 使用属性选择器

另一种方法是使用属性选择器来避免直接使用ID选择器:

这种方法虽然有效,但略显繁琐。

5. 使用 CSS.escape

对于动态生成的ID,可以使用 CSS.escape 方法来自动处理转义问题:

这种方法可以使代码更加简洁,并且自动处理转义问题。

6. 自定义函数

如果你需要支持旧浏览器,可以创建一个自定义函数来处理转义:

这个函数将数字ID自动转换为属性选择器的形式,适用于不支持 CSS.escape 的旧浏览器。