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