【问题标题】:jquery: differences in how literal string selector vs variable selectorjquery:文字字符串选择器与变量选择器的差异
【发布时间】:2014-08-28 22:09:40
【问题描述】:

我有一些带有“.”的代码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);

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

【问题讨论】:

  • '.classNameWithDot\.inIt' 结果为.classNameWithDot.inIt,所以我怀疑您的观察是否正确。无论您使用字符串文字还是变量都无关紧要。除非您可以使用 jsfiddle.net(或类似的东西)重现该行为,否则我认为您的实际问题出在其他地方。
  • 这个小提琴与你的描述不符:jsfiddle.net/jtbowden/zf4daLxt
  • 类名不以“点”开头。例如:'someName.restOfName'。 @FelixKling

标签: jquery jquery-selectors escaping delimiter backslash


【解决方案1】:

我认为您的测试用例可能会倒退。

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

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

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

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

感谢书呆子狙击;)

  • 克雷格

【讨论】:

    【解决方案2】:

    在 JavaScript 字符串文字(这是在源代码中输入字符串时)\ 具有特殊含义,如果您想将它放在字符串中,您将拥有用\(这是转义字符)转义它。

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

    斜线(\)

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

    #id.class

    作为选择器,这意味着选择具有 id id 和类 class 的元素,但如果你的 id 是 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

    【讨论】:

    • 感谢 Musa,您的解释澄清了困惑。
    猜你喜欢
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多