2014-08-28 79 views
0

我有一些代码有'。'字符在CSS类名,因此逃生时需要使用选择$('.classNameWithDot\\.inIt')jquery:文字字符串选择符与变量选择符的区别

我遇到了一个有趣的错误,由此,如果你在一个变量选择存储也不会如预期,除非你改变你如何共同寻找元素从两个反斜杠中将点字符转义。

//will not work 
//var selector = '.classNameWithDot\\.inIt'; 

//works in a variable, with one backslash as opposed to the required double backslash for the literal 
var selector = '.classNameWithDot\.inIt'; 

var element = $(selector); 

我的问题是为什么会出现这种情况?为什么我们必须在文字选择器中使用双反斜线,而在变量选择器中使用单斜线?

+0

'” .classNameWithDot \ .inIt''结果,所以我怀疑你的观察是否正确。无论您使用字符串文字还是变量都无关紧要。除非你可以用http://jsfiddle.net/(或类似的东西)来重现这种行为,否则我认为你的实际问题在别的地方。 – 2014-08-28 22:14:06

+0

这个小提琴与您的描述不符:http://jsfiddle.net/jtbowden/zf4daLxt/ – 2014-08-28 22:25:30

+0

类名称不以'点'开头。例如:'someName.restOfName'。 @FelixKling – nelsonomuto 2014-09-28 22:36:46

回答

1

在JavaScript 字符串文字(这是当该串中的源代码被输入了)\具有特殊的含义如果你想把它放在一个字符串中,你必须用\(这是逃避角色)逃脱它。

var str = 'a slash(\\)'; 

斜杠(\)

现在jQuery选择一个点是一个特殊字符,你猜对了需要进行转义

#id.class

作为选择器,这意味着选择具有编号为的元素210和class,但如果你的ID是id.class那么该点需要被转义。

#id.class

现在这是你要找的选择,与id.class
现在的ID的元素,我们如何在JS写这

var str = '#id\.class'; 

#id。类

这并不因为\工作是JS转义字符,我们不希望在.我们希望它在jQuery选择发动机逃脱JS逃脱。
所以我们必须逃避转义字符(本身)。

var str = '#id\\.class';/* 
     this____|| 
     escapes | 
     this_____|  */ 

#ID \的.class

现在你可以在`.classNameWithDot.inIt`你的选择传递给jQuery的

+0

谢谢穆萨,你的解释澄清了混淆。 – nelsonomuto 2014-09-28 22:33:12

2

我想你可能会让你的测试用例倒退。

我做了一个jsbin: http://jsbin.com/xuxixarimuhe/1/

双反斜线允许你实际上是在一个字符串输入一个反斜杠,否则就意味着创造一个转义序列。

所以需要双反斜杠,以便您可以在选择器中放入\。

这就是说...我强烈建议,如果可以的话,删除一个css类名的时间段,我甚至不知道你可以这样做。

感谢您的书呆子鹬)

  • 克雷格