如何在css/js属性选择器[attr = value]中正确转义属性值?

sky*_*e26 15 javascript css css-selectors selectors-api

我应该如何在css/js attibute选择器中转义属性[attr=value]

具体来说,这是正确的吗?

document.querySelector('input[name="test[33]"]')
Run Code Online (Sandbox Code Playgroud)

我正在寻找这样做的"标准方法",如果有的话,因为我不希望Sizzle使用繁重的执行回退功能

Jam*_*ice 13

是的,这是一种正确的方法.该选择器3级规范规定如下:

属性值必须是CSS标识符或字符串.

您的问题中的示例使用字符串作为属性值."标识符"定义如下:

在CSS中,标识符...只能包含字符[a-zA-Z0-9]和ISO 10646字符U + 00A0及更高,加上连字符( - )和下划线(_); 它们不能以数字,两个连字符或连字符后跟数字开头.标识符还可以包含转义字符和任何ISO 10646字符作为数字代码...

所以在那之后,逃避特殊字符并省略引号也是合法的:

document.querySelector('input[name=test\\[33\\]]')
Run Code Online (Sandbox Code Playgroud)

  • [`CSS.escape()`](https://developer.mozilla.org/en-US/docs/Web/API/CSS/escape) 是解决此问题的推荐方法,并且所有现代浏览器都支持。Mathias Bynens 也有一个 [polyfill](https://github.com/mathiasbynens/CSS.escape/blob/master/css.escape.js)。 (7认同)
  • @toPeerOrNotToPeer - 不是我所知道的,但如果你将值括在引号中就不需要转义,这就是我一直以来所做的. (2认同)