【问题标题】:Why won't my jQuery selector work for IDs with colons and periods in them?为什么我的 jQuery 选择器不适用于带有冒号和句点的 ID?
【发布时间】:2011-05-26 15:58:10
【问题描述】:

我有一个脚本,它应该动态地将包含组成员名称的 div 放置在一个容器 div 中。这些 div 由“groupMemberEntryDiv”和组成员的电子邮件地址(在我的系统中是唯一的)的串联来标识。

问题是在 jQuery 选择器中使用 ID 不起作用。我相信我已经涵盖了可能导致此问题的所有可能的挂断:

  1. 电子邮件地址中存在“@”(元素 ID 不能包含此字符)。我已通过将它们替换为“:”来解决此问题,这是允许的字符。另外,由于 ':' 没有出现在有效的电子邮件地址中,我可以使用 indexOf 解析字符串并在需要再次使用电子邮件地址时将其替换为 '@'。
  2. 存在“:”和“.”在(现在修改的)电子邮件地址(jQuery may see them as pseudo-classes and classes respectively)中。按照该页面中的说明,我尝试转义字符。事实上,我从那个链接中提取了 .replace() 函数来执行此操作。

不幸的是,选择器仍然无法工作。我创建了一个简单的jFiddle 来说明问题。

有人能解释一下发生了什么吗?

【问题讨论】:

  • 让每个人都可以在标记中看到成员电子邮件似乎不是一个好主意。您应该使用一些数字 ID。
  • @BoltClock。你当然可以把它们放在一个 ID 中,它只会弄乱选择器,所以你必须逃避它们
  • @morgar:我的系统设置为“添加”某人为联系人需要知道他们的电子邮件地址才能发送请求。
  • @Neal:如果我有id='blah:hover',会发生什么?那有效吗? CSS 将如何处理?
  • @Kevin 还是个坏主意,但是,您可以使用 data-* 属性来存储电子邮件地址。即<div id="user-323" data-email="will_get_spammed@gmail.com"><div>,然后使用$('#user-323').data('email');访问

标签: javascript jquery jquery-selectors css-selectors


【解决方案1】:

这是因为您正在转义特殊字符(这对于选择器来说是正确的),但不需要转义 ID。考虑:

$("#protectedGroupDiv100").append("<div id='groupMemberEntryDiv"  + emailString + "' class='groupMemberEntryDivs'>hey</div>");

生成:

<div id="groupMemberEntryDivblahblah\:gmail\.com" class="groupMemberEntryDivs"></div>

看看这是如何创建一个 id 为:#groupMemberEntryDivblahblah\:gmail\.com 的元素 但后来你使用了#groupMemberEntryDivblahblah\:gmail\.com 的选择器,这看起来是一样的,但jQuery 寻找的实际上是#groupMemberEntryDivblahblah:gmail.com。由于元素的 ID 中包含反斜杠,因此 jQuery 找不到选择器的匹配项。

要解决此问题,请在转义之前设置 ID:

$.each(emailArray, function(index, emailString){
    emailString = emailString.replace("@", ":");            //Element attributes cannot contain "@"

    $("#protectedGroupDiv100").append("<div id='groupMemberEntryDiv"  + emailString + "' class='groupMemberEntryDivs'>hey</div>");

    emailString = emailString.replace(/(:|\.)/g,'\\$1');    //Escape ':' and '.'

   alert($("#groupMemberEntryDiv"  + emailString).length);                  
});

这里是修改后的jsFiddle

虽然这可行,但我不建议在标记中包含用户电子邮件。正如其他人所暗示的那样,这可能会导致安全问题。

【讨论】:

  • 感谢您的回答!但是,如果要求用户首先知道联系人的电子邮件以便向他们发送“好友请求”,这会导致哪些安全问题?
  • 垃圾邮件机器人可以抓取页面并收集电子邮件,我可以看到我什至不知道的人们的电子邮件,并使用它来访问他们的帐户等......
  • @Chad:我想我应该多解释一下我的系统。这些组是用户可以放置他们的联系人的类别。为了让两个用户建立联系关系(“友谊”),一个用户必须使用对方的电子邮件以及接收用户选择的数字代码。如果电子邮件在系统中并且代码正确,则发送请求。在 24 小时内最多尝试向同一电子邮件地址发出两次请求,以阻止垃圾邮件发送者。因此,用户可以分类到组中的任何联系人都是用户的朋友,其电子邮件地址用户已经知道
  • ...继续@Chad:知道这一点,垃圾邮件发送者如何使用它?我想让它尽可能安全。
  • 如果访问此内容所在的页面需要登录,并且一旦登录,您就只能查看已与您的帐户(朋友)关联的电子邮件,那么您应该没问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
  • 2018-03-11
  • 2011-10-25
  • 2017-10-08
  • 2012-02-23
相关资源
最近更新 更多