querySelectorAll 是不是支持 id 中的句点(.)字符?
Posted
技术标签:
【中文标题】querySelectorAll 是不是支持 id 中的句点(.)字符?【英文标题】:Does querySelectorAll support the period(.) character in an id?querySelectorAll 是否支持 id 中的句点(.)字符? 【发布时间】:2013-07-07 22:46:57 【问题描述】:querySelectorAll 是否支持 id 中的句点(.)字符?
我的意思是,如果我添加如下元素:
var div = document.createElement('div');
div.id='my.divid';
document.body.appendChild(div);
然后我使用 querySelectorAll 如下:
document.querySelectorAll('#my.divid');
那我什么都得不到!
所以句号是id的合法字符,querySelectorAll是Firefox官方提供的方法;我不敢相信该方法不支持 id 中的句点(。)。我是不是搞错了?
【问题讨论】:
【参考方案1】:你需要记住.
代表一个类选择器,所以选择器#my.divid
代表一个ID为my
的元素和一个类divid
,不是一个带有编号my.divid
。因此,您的选择器将匹配以下元素:
var div = document.createElement('div');
div.id = 'my';
div.className = 'divid';
document.body.appendChild(div);
如果您需要选择上面给出的 ID 为 my.divid
的元素,则需要转义句点:
document.querySelectorAll('#my\\.divid');
注意,双反斜杠是因为它是一个 JS 选择器字符串;在 CSS 规则中,您将使用单个反斜杠:#my\.divid
【讨论】:
在其他地方,这个:newName = CSS.escape("name.dot") 返回 'name\\.dot'。感谢 Mathias Bynens 在***.com/questions/19702301/… 的指出【参考方案2】:querySelectorAll
中的句点表示您正在指定一个 css 类。在您的情况下,querySelectorAll
试图找出一个带有 id
“my” 并且具有 css 类“divid”的 DOM 元素。 querySelectorAll
怎么会知道这次你想要的是 id 而不是 class 的元素?由您决定是否拥有适当的id
属性,以免混淆该方法。虽然允许使用句点,但最好的做法是在大多数情况下避免使用它,以免混淆 jquery 等其他库。
【讨论】:
也就是说querySelectorAll不支持id属性中的句点?如果要在id中插入句点,通过querySelectorAll获取不到,还是必须将id中的句点(.)改为反斜杠和句点(\.),对吗? 您必须使用“\\.”我想是为了逃避它。 @user2155362:您一定错过了我在您发表评论前 10 分钟基本上解释了您提出的所有问题的回答。 我验证了双反斜杠 \\ 有效。querySelector("#abc\\.test");
以上是关于querySelectorAll 是不是支持 id 中的句点(.)字符?的主要内容,如果未能解决你的问题,请参考以下文章
使用 querySelectorAll()。方法返回的结果是不是有序?
0158 JavaScript获取元素:id,标签名,类名,querySelector,querySelectorAll,获取bodyhtml
Puppeteer:使用page.querySelectorAll()不是一个函数
使用 querySelectorAll 时,有没有办法在不使用 ID 的情况下引用上下文节点的直接子节点?
为啥 document.querySelectorAll 返回的是 StaticNodeList 而不是真正的 Array?