修改
感谢您的所有评论和回答。我感到困惑,我能够在尝试不同的答案后解决问题,但现在无法重现问题???我不知道发生了什么。
我想要做的是通过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
答案 0 :(得分:3)
答案 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);