【问题标题】:escape dot in javascriptjavascript中的转义点
【发布时间】:2013-10-25 18:03:19
【问题描述】:

如果 ID 中包含 .,则 jQuery 选择器无法选择它。
在我的应用程序中,ID 名称从用户名动态生成。

如何从标签 ID 中转义任何特殊字符,以便 jQuery 选择器正常工作?

例如,ID1:This.Is.ID.1 ID2:This.is.Another.ID

谁能帮帮我。

提前致谢。

【问题讨论】:

  • Regex 转义是单个 \
  • 能否请你写正则表达式的完整行代码。
  • 你需要这个的具体情况是什么?首先你谈论 jQuery 选择器,然后你问如何在正则表达式中转义点。
  • jQuery 选择器无法选择,所以我需要转义 ID 来告诉 jquery 使用转义的 ID。我认为是这样,不确定...... :(
  • RTFM: api.jquery.com/category/selectors "使用任何元字符(例如!"#$%&'()*+,./:;?@[]^` {|}~ ) 作为名称的文字部分,必须使用两个反斜杠进行转义:\\。"

标签: javascript jquery escaping


【解决方案1】:

如果我理解正确,您想修改一个包含句点的字符串,使其在每个句点前面都有 \\,以便在 jQuery 选择器中作为 id 支持。以下是如何做到这一点:

var username = 'some.username.with.dots';

// Replace all periods with \\. to 
username = username.replace(/\./g, '\\\\.');

// find element that matches #some\\.username\\.with\\.dots
$('#' + username).doSomethingWithjQuery();
  • . 在正则表达式中表示“任何字符”,因此您需要通过将\ 放在前面来对其进行转义。
  • g 正则表达式修饰符意味着贪婪,没有它,替换表达式只会用\\. 替换第一个.

编辑 我尝试了我的代码,看来您需要将替换值更改为 \\\\. 以使其变为 \\.

【讨论】:

  • 我不确定将一条丑陋的线条分成三条丑陋的线条是好是坏。也许写一个小的 jQuery 扩展来隐藏这种丑陋会更好。类似$.SelectAndEscape('#some.username.with.dots', '.')...
  • 我只想逃避 . ,您的代码对我来说完全正常。谢谢。
【解决方案2】:

官方的 jQuery FAQ 有这个确切的问题:How do I select an element by an ID that has characters used in CSS notation? 他们甚至有一个功能可以帮助你逃脱。引用它:

...冒号 (":") 和句点 (".") 在 jQuery 选择器的上下文中是有问题的,因为它们分别表示伪类和类。

为了告诉 jQuery 将这些字符按字面意思处理而不是 CSS 符号,必须通过在它们前面放置两个反斜杠来“转义”它们

// Does not work:
$( "#some:id" )
 
// Works!
$( "#some\\:id" )
 
// Does not work:
$( "#some.id" )
 
// Works!
$( "#some\\.id" )

以下函数负责转义这些字符并在 ID 字符串的开头放置一个“#”:

function jq( myid ) {
    return "#" + myid.replace( /(:|\.|\[|\]|,|=)/g, "\\$1" );
}

函数可以这样使用:

$( jq( "some.id" ) )

【讨论】:

    【解决方案3】:

    使用\\(双反斜杠)转义特殊字符。

    $('#this\\.something')
    

    Fiddle

    【讨论】:

      【解决方案4】:

      the jQuery documentation 声明使用两个反斜杠对其进行转义。

      所以你的例子会使用$("#This\\.Is\\.ID\\.1")

      【讨论】:

      【解决方案5】:

      您实际上不需要将 . 与 id 分开。您只需要转义选择器中的任何特殊字符。例如,要选择以下元素:

      <div id='foo.bar'></div>
      

      ...你可以使用:

      $('#foo\\.bar');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-10
        • 1970-01-01
        • 2015-05-21
        • 2015-05-16
        • 2014-02-26
        • 2011-01-01
        • 2015-01-24
        相关资源
        最近更新 更多