【问题标题】:jQuery: How to access an element with a plus sign (+) in the id [duplicate]jQuery:如何访问id中带有加号(+)的元素[重复]
【发布时间】:2013-08-13 13:58:36
【问题描述】:

我有一个 jQuery 循环,它将多行附加到一个表中。行数可以在运行时改变,因此行 ID 是动态生成的。

$("#tableBody")
    .append($("<tr>")
        .attr('id','row-icon' + currentID)...

稍后,我需要访问这些添加的行。但是,当 currentID 的值中包含“+”符号时 - 当我尝试访问行元素时出现“未定义”错误。

例如,下面的行在currentID 为“1”时有效 - 但在 ID 为“vm+1”时失败。

var testID = $("#row-icon" + currentID).attr("id");

我是否缺少一个简单的解决方案来“转义”额外的“+”符号?

工作示例here

编辑:我应该注意,ID 是由第 3 方发送的 - 所以我无法控制删除“+”符号。

【问题讨论】:

  • ID 必须以字母 ([A-Za-z]) 开头,后跟任意数量的字母、数字、连字符、下划线、冒号和句点。所以那些是非法的身份证。
  • @Tdelang:在 HTML4 中是正确的,但 HTML5 对 id 属性更加宽容
  • @Kneel-Before-ZOD:变量的名称中没有+。该变量的 value 确实有一个 + 非常好。
  • 我想应该这样 -> jsfiddle.net/svn8W/4

标签: jquery variables


【解决方案1】:

它不起作用,因为+ 符号是jQuery 选择器中所谓的元字符explained in the documentation。您应该使用 2 个反斜杠对其进行转义:

使用任何元字符(例如 !"#$%&'()*+,./:;?@[\]^`{|}~ ) 作为名称的文字部分,它必须 用两个反斜杠转义:\\.例如,一个元素 id="foo.bar",可以使用选择器 $("#foo\\.bar")。 W3C CSS 规范包含有关有效 CSS 的完整规则集 选择器。 Mathias Bynens 在 CSS 上的博客条目也很有用 标识符的字符转义序列。

所以,在你的情况下,你会这样做(见jsFiddle):

var test = $("#expand-icon" + currentID.replace(/\+/g, '\\+')).attr("src");
var testID = $("#row-icon" + currentID.replace(/\+/g, '\\+')).attr("id");

【讨论】:

  • 感谢 Wouter 添加演示 - 解决了它。对于任何有类似问题的人,可以在这里找到更新的 jsfiddle:jsfiddle.net/Locotes/svn8W/7
【解决方案2】:

正如其他人所提到的,使用+ 会创建一个无效的 ID.. 但随着时间的推移,我面临着使用其他代码处理此类场景的挑战..

您可以使用\\+ 转义+。见下文,

var test = $("#expand-icon" + currentID.replace('+', '\\+')).attr("src");
var testID = $("#row-icon" + currentID.replace('+', '\\+')).attr("id");

alert(test+'\n'+testID); 

DMEO: http://jsfiddle.net/ZdeC8/

对于多个实例,您可以使用正则表达式替换字符串。见下文,

var test = $("#expand-icon" + currentID.replace(/\+/g, '\\+')).attr("src");
var testID = $("#row-icon" + currentID.replace(/\+/g, '\\+')).attr("id");

【讨论】:

    【解决方案3】:

    在特殊符号被用作元素 ID 的一部分的情况下,必须对它们进行转义,以便让 jQuery 知道这些字符将按字面意思处理。例如,如果一个元素的 id 为“vm+8”,则以下 sn-p 将获取该元素:

    $('#vm\\+8');
    

    但是,作为一项规则,尽量避免使用特殊符号作为元素 ID 的一部分。

    【讨论】:

      猜你喜欢
      • 2012-06-12
      • 2017-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2010-09-19
      • 2020-02-13
      相关资源
      最近更新 更多