Javascript querySelector中需要转义哪些字符?

Javascript querySelector中需要转义哪些字符?,javascript,css,Javascript,Css,根据这里的文件: 它表示在执行querySelector时需要转义某些字符: 匹配不遵循CSS语法的ID或选择器(通过使用 冒号或空格(例如不适当的冒号)必须从 带有反斜杠的字符。因为反斜杠是转义字符 在JavaScript中,如果要输入文字字符串,则必须转义 两次(一次用于JavaScript字符串,另一次用于 查询选择器): 我希望编写一个函数,对字符串进行转义,但需要知道哪些字符需要首先转义 谢谢更新答案: 你在下面的评论中说: Im制作firefox插件的目的是通过标签中的属性识别项目(

根据这里的文件:

它表示在执行querySelector时需要转义某些字符:

匹配不遵循CSS语法的ID或选择器(通过使用 冒号或空格(例如不适当的冒号)必须从 带有反斜杠的字符。因为反斜杠是转义字符 在JavaScript中,如果要输入文字字符串,则必须转义 两次(一次用于JavaScript字符串,另一次用于 查询选择器):

我希望编写一个函数,对字符串进行转义,但需要知道哪些字符需要首先转义

谢谢

更新答案:

你在下面的评论中说:


Im制作firefox插件的目的是通过
标签
中的属性识别项目(cuz类对所有项目都是相同的)。因此,
querySelector('[label=“blah blah blah”]')
用户可以编辑标签,因此问题就出在这里,用户可以做任何事情

啊,这改变了一切。一组完全不同的规则适用于属性选择器中的操作数。当您使用
包围操作数时,我认为您只需用反斜杠转义
(当然,用反斜杠转义任何反斜杠),例如,使用文本
测试“one”的
标签的选择器(而不是
查询选择器的字符串,我们将回到这一点)二三将是二三。因此,从包含目标标签的变量开始,我们将所有
字符替换为
\”
,所有
\
字符替换为
\

var div = document.querySelector('[label="' + theLabel.replace(/["\\]/g, '\\$&') + '"]');
完整示例:


…将选择器
.B\26 W\3F
传递到选择器引擎

如果可能,您可以使用此解决方案,尽管不是跨浏览器(除IE之外的所有现代浏览器)——


非常感谢你的回复。我是否可以将字符串转换为querySelector安全的?有没有预先编写好的函数?你知道吗?@Noitidart:我不知道。您可以使用正则表达式来转义相关字符,但它并不完美。我只是倾向于使用简单的
id
class
值,这些值只使用
a-zA-Z
0-9
-
;然后我就不必担心转义了,我做的是一个firefox插件,我做的是通过标签中的属性识别项目(cuz类对所有项目都是相同的)。因此,
querySelector('[label=“blah blah blah”]')
用户可以编辑标签,因此问题就出在这里,用户可以做任何事情:( lol@Noitidart:啊,在这种情况下,适用完全不同的规则——生活可能会变得简单一些。我已经更新了答案。非常感谢你。我真的很欣赏这项艰巨的工作。所以基本上只需要双引号和前斜杠就可以了,嗯。mdn文章说,我也经历过,我需要使用像4斜杠一样的斜杠只有一个。
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Escaping attributes</title>
</head>
<body>
  <div label='testing "one" \two three'>This should turn green</div>
  <script>
    (function() {
      var label = 'testing "one" \\two three';
      var div = document.querySelector('[label="' + label.replace(/["\\]/g, '\\$&') + '"]');
      div.style.color = "green";
    })();
  </script>
</body>
</html>
var list = document.querySelectorAll(".B\\26 W\\3F");
CSS.escape(".foo#bar") ->"\.foo\#bar"