元素中的多个点Id a否?

时间:2013-10-10 16:28:50

标签: jquery

修改

感谢您的所有评论和回答。我感到困惑,我能够在尝试不同的答案后解决问题,但现在无法重现问题???我不知道发生了什么。

我想要做的是通过id获取一个元素,但是这个id包含多个点,因为id是XML文档中的“路径”。所以我假设如果你在id名称中有多个点,即使你已经转义它们也不行?

var triggerElementID = "a.b.c.d";
var eleId = triggerElementID.replace(/\./g, "\\\\.");
console.log(eleId);
var thisele = $('#' + eleId);
console.log(thisele);

上面的代码就是我所拥有的它逃脱了点,console.log打印出这个a\\.b\\.c\\.d,而{。1}}的console.log打印出来这个

thisele

3 个答案:

答案 0 :(得分:3)

当我遇到这个问题时,我能够使用它:

$("[id='" + eleId +"']");

http://jsfiddle.net/tmw63/

答案 1 :(得分:1)

jQuery使用sizzle.js CSS3选择器引擎。这将把它们转换为a.b.c.d到一个链式选择器,其中.采用它的传统意义。所以它将是公平的:

a with [a class of] b [and a class of] c [and a class of] d

现在sizzle,因此jQuery,确实意味着支持转义的选择器(参见here)但应该使用两个反斜杠进行转义。 (\\

看起来你的正则表达式可能存在问题,如果jQuery仍然说选择器是a.b.c.d,尽管试图逃避它们。

-> var triggerElementID = "a.b.c.d";
-> var eleId = triggerElementID;//.replace(/\./g, "\\\\.");
undefined
-> eleId
"a.b.c.d"

在开发者控制台中测试它也支持这一理论。

编辑:未在上面的代码中看到.replace()调用被注释掉了。取消注释时正常工作......

答案 2 :(得分:0)

替换字符串中有太多斜杠。

var triggerElementID = "a.b.c.d";
var eleId = triggerElementID.replace(/\./g, "\\.");
var thisele = $("#"+eleId);
console.log(thisele);

FIDDLE