1

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

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

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

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

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

我是否错过了一个简单的解决方案来“逃避”额外的“+”符号?

这里的工作示例。

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

4

3 回答 3

6

它不起作用,因为+符号是 jQuery 选择器中所谓的元字符,如文档中所述。您应该使用 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");
于 2013-08-13T14:07:42.233 回答
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/

对于多个实例,您可以使用 regEx 替换字符串。见下文,

var test = $("#expand-icon" + currentID.replace(/\+/g, '\\+')).attr("src");
var testID = $("#row-icon" + currentID.replace(/\+/g, '\\+')).attr("id");
于 2013-08-13T14:03:19.323 回答
1

在这种情况下,特殊符号被用作元素 ID 的一部分,它们必须被转义,以便让 jQuery 知道这些字符将被逐字处理。例如,如果一个元素的 id 为“vm+8”,则以下代码段将获取该元素:

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

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

于 2013-08-13T14:12:27.670 回答