jquery:文字字符串选择器与变量选择器的区别

时间:2014-08-28 22:09:40

标签: jquery jquery-selectors escaping delimiter backslash

我有一些代码有'。'因此,css类名中的字符需要转义才能使用选择器$('.classNameWithDot\\.inIt')

来查找元素

我遇到了一个有趣的错误,如果你将选择器存储在一个变量中,它将无法按预期工作,除非你改变了将点字符从两个反斜杠转换为一个反斜杠的方式。

//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);

我的问题是为什么会这样?为什么我们必须在文字选择器中使用双反斜杠而单个用于变量选择器?

2 个答案:

答案 0 :(得分:2)

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

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

双反斜杠允许您在字符串中实际输入反斜杠,否则意味着创建转义序列。

因此需要双反斜杠,以便您可以在选择器中实际放置\。

话虽如此......我强烈建议,如果可以的话,删除css类名中的句点,我甚至不知道你可以这样做。

感谢书呆子狙击;)

  • 克雷格

答案 1 :(得分:1)

在JavaScript 字符串文字中(这是在源代码中输入字符串的时候)\具有特殊含义,如果你想将它放在字符串中,你可以'我必须使用\(这是转义字符)来逃避它。

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

斜杠(\)

现在在jQuery选择器中,一个点是一个特殊字符,你猜对它需要被转义

  

#id.class

作为选择器,这意味着选择标识为id和类class的元素,但如果您的标识为id.class,那么该点需要转义。

  

#id.class

现在这是您正在寻找的选择器,ID为id.class的元素 现在我们如何在js

中写这个
var str = '#id\.class';
  

#id.class

这不起作用,因为\是js中的转义字符,我们不希望js中的.转义,我们希望它在jQuery选择器引擎中转义。
所以我们必须逃避转义字符(与它自己)。

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

#ID \的.class

现在您可以将选择器传递给jQuery