DOM节点id如果包含加号,为何无法用querySelector查找呢?
如
<div id="aasfd_唉唉唉+恩恩">
</div>
用document.getElementById("aasfd_唉唉唉+恩恩")
可以得到节点
但是 用document.querySelector("#aasfd_唉唉唉+恩恩")和
document.querySelector("#aasfd_唉唉唉\+恩恩")得到的都是null
为什么会这样呢?
12 回复
ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").
HTML5 可以使用 Unicode 转义:
document.querySelector("#aasfd_唉唉唉\00002円恩恩")
// 或
document.querySelector("#aasfd_唉唉唉\\+恩恩")
其它情况加一个斜杠?
加一个斜杠是css的语法,\+,但是在 js 中,斜杠是需要转义的 \\ 这个才是斜杠。
你说的加一个斜杠,那是因为那些字符不需要转义。正好 :、-、_ 也都不是转义字符。
let str = '\'; // SyntaxError: Invalid or unexpected token
'\n'.length === 1
'\+'.length === 1
'\+' === '+'
'\\+'.length === 2
如果你想使用一个斜杠,可以使用 String.raw:
document.querySelector(String.raw`#aasfd_唉唉唉\+恩恩`)
CSS.escape('adb-sd.f_s;df#sdf')
"adb-sd\.f_s\;df\#sdf"
a=CSS.escape('adb-sd.f_s;df#sdf')
"adb-sd\.f_s\;df\#sdf"
a
"adb-sd\.f_s\;df\#sdf"
用1个斜杠没报错啊?