Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用反斜杠查询数据属性_Javascript_Html_Custom Data Attribute - Fatal编程技术网

Javascript 使用反斜杠查询数据属性

Javascript 使用反斜杠查询数据属性,javascript,html,custom-data-attribute,Javascript,Html,Custom Data Attribute,我有一个值中带有反斜杠的HTML数据属性。对该元素的简单查询失败;我必须在查询中使用双反斜杠 考虑以下测试: var file=“foo\\bar”;//很清楚,这只是一个反斜杠。 document.getElementById('d2').dataset.file=file; var singleBackslash='*[data file=“'+file+'”]; var doubleBackslash='*[data file=“'+file.replace(/\\\/g,'\\\\\'

我有一个值中带有反斜杠的HTML数据属性。对该元素的简单查询失败;我必须在查询中使用双反斜杠

考虑以下测试:

var file=“foo\\bar”;//很清楚,这只是一个反斜杠。
document.getElementById('d2').dataset.file=file;
var singleBackslash='*[data file=“'+file+'”];
var doubleBackslash='*[data file=“'+file.replace(/\\\/g,'\\\\\')+''];
var singleCount=document.querySelectorAll(singleBackslash).length;
var doubleCount=document.querySelectorAll(双反斜杠).length;
var out=document.querySelector('textarea');
out.value=“有“+singleCount+”元素与“+singleBackslash+”\n”匹配;
out.value+=“有”+双计数+“元素匹配”+双反斜杠

规范规定
querySelectorAll
接受一个“选择器字符串”,它是:

…一个或多个的列表

它链接到的选择器3级规范说明:

选择器中的字符可以按照与CSS相同的方式用反斜杠转义

最后,它所链接的CSS2.1规范描述了反斜杠用于转义内容的三种方式


因此,
querySelectorAll
——与JavaScript内部的任何用法不同,它对反斜杠有特殊的意义。

FWIW,如果我使用jQuery搜索元素,同样的行为也会发生;但是,这可能只表明jQuery正在退回到浏览器的本机
queryselectoral
实现,而不是Sizzle;这也是逃避角色。在您的示例中,`\b`将仅转换为
b
。如果你想把``作为一个字符使用,你就必须对它进行转义,因此`\`@vol7ron I已经在JavaScript中对它进行了足够的转义。它在HTML5属性中没有特殊意义。我还没有在
querySelectorAll
的规范中发现任何反斜杠。我理解逃避角色意味着什么;您能指出在这个上下文中哪个规范赋予反斜杠特殊的含义吗?通常,它是针对ECMAScript中的字符串的。你使用的是JS,所以不仅仅是HTML5;看起来我对
\b
的理解是错误的,它确实有一个翻译(退格);在正则表达式中,它将是一个单词边界。有关查询选择器语法的详细信息;请参见此处:第二个链接(MDN)包含指向API规范的链接。为第一次评论道歉;我没有看这篇文章的作者——很确定你已经知道逃跑了。所以有一个双重翻译。我为此创建了一个包装函数,或者为正则表达式模式生成器创建了一个包装函数,这使得处理大规模翻译变得更加简洁。不过,在linter、调试通知或开发工具中看到这些信息会很好