jQuery选择器和反斜杠

Kev*_*vin 5 jquery jquery-selectors

我有一个dom元素,它包含一个完全限定的名称作为id属性的一部分;

<div id="domain\element\div">My Div</div>
Run Code Online (Sandbox Code Playgroud)

似乎不可能让jQuery按ID选择元素.这是我的实验;

var $e1 = $('#domain\\\element\\\div');
var $e2 = $('#domain\\element\\div');
var $e3 = $(document.getElementById('domain\\\element\\\div'));
console.log($e1);
console.log($e2);
console.log($e3);
Run Code Online (Sandbox Code Playgroud)

控制台的输出显示前两个为空,而第三个工作;

[]
[]
<div id=?"domain\element\div">?TODO write content?</div>?
Run Code Online (Sandbox Code Playgroud)

我正在使用jQuery 1.5.2.这是jQuery本身的错误还是我的选择器字符串错了?

Bol*_*ock 17

如果您可以更改HTML代码中的ID,请找到除\ID 后面的反斜杠之外的其他分隔符,以便为选择器创建有效的ID(请参阅此处).下划线_会很好.

如果你不能改变HTML,jQuery仍然可以使用ID和ID选择器中的反斜杠.除此之外,您需要使用四个反斜杠来匹配ID选择器中的每个文字反斜杠:

$('#domain\\\\element\\\\div')
Run Code Online (Sandbox Code Playgroud)

你实现了这个目标

  1. 拿ID:

    domain\element\div
    
    Run Code Online (Sandbox Code Playgroud)
  2. 添加#符号并转义选择器的反斜杠:

    #domain\\element\\div
    
    Run Code Online (Sandbox Code Playgroud)
  3. 通过加倍来转义每对反斜杠以用于JavaScript字符串(也请注意引号):

    '#domain\\\\element\\\\div'
    
    Run Code Online (Sandbox Code Playgroud)
  4. 然后将字符串传递给$()上面.

的jsfiddle