我发现几乎所有非字母数字字符都必须在querySelector()和querySelectorAll()中引用。从我的测试来看:
for( var i=32; i<127; i++ ) {
var ch = String.fromCharCode(i);
try{ document.querySelector("[a"+ch+"b]") }
catch(e) { console.log( i + ' = ' + ch ); }
};只有"-“和"_”不需要逃跑。这需要为querySelector的参数设置一个专门的querySelector类型函数,以确保它们被正确地过滤。其他函数(例如,setAttribute、getAttribute)不需要转义。
我无法找到验证测试的文档。例如,属性名称中的Unicode字符如何?
发布于 2012-09-18 21:02:36
选择器文法如下:
ident [-]?{nmstart}{nmchar}*
name {nmchar}+
nmstart [_a-z]|{nonascii}|{escape}
nonascii [^\0-\177]
unicode \\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
escape {unicode}|\\[^\n\r\f0-9a-f]
nmchar [_a-z0-9-]|{nonascii}|{escape}
num [0-9]+|[0-9]*\.[0-9]+
string {string1}|{string2}
string1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*\"
string2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*\'
invalid {invalid1}|{invalid2}
invalid1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*
invalid2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*
nl \n|\r\n|\r|\f
w [ \t\r\n\f]*
D d|\\0{0,4}(44|64)(\r\n|[ \t\r\n\f])?
E e|\\0{0,4}(45|65)(\r\n|[ \t\r\n\f])?
N n|\\0{0,4}(4e|6e)(\r\n|[ \t\r\n\f])?|\\n
O o|\\0{0,4}(4f|6f)(\r\n|[ \t\r\n\f])?|\\o
T t|\\0{0,4}(54|74)(\r\n|[ \t\r\n\f])?|\\t
V v|\\0{0,4}(58|78)(\r\n|[ \t\r\n\f])?|\\vhttps://stackoverflow.com/questions/7670206
复制相似问题