Jquery 元素Id中的多个点a否?

Jquery 元素Id中的多个点a否?,jquery,Jquery,编辑 谢谢你的评论和回答。我很困惑,在尝试了不同的答案后,我能够解决问题,但现在无法重现问题???我不知道发生了什么事 我试图做的是通过id获取一个元素,但是这个id包含多个点,因为id是XML文档中的“路径”。所以我假设,如果你在id名称中有多个点,即使你已经转义了它们,它也不会工作 var triggerElementID = "a.b.c.d"; var eleId = triggerElementID.replace(/\./g, "\\\\."); console.log(eleId)

编辑

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

我试图做的是通过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
,而
thisele的console.log打印出这个

[prevObject: b.fn.b.init[1], context: document, selector: "#a.b.c.d", jquery: "1.9.1", constructor: function…]
context: document
length: 0
prevObject: b.fn.b.init[1]
selector: ""#a.b.c.d"
__proto__: Object[0]
jQuery使用CSS3选择器引擎。这将把它们转换为
a.b.c.d
链接选择器,其中
具有类的传统含义。因此,这相当于:

a with [a class of] b [and a class of] c [and a class of] d
现在sizzle和jQuery确实意味着支持转义选择器(请参阅),但应该使用两个反斜杠转义。(
\\

如果jQuery尽管试图转义选择器,但仍然说选择器是
a.b.c.d
,那么您的正则表达式似乎有问题

-> var triggerElementID = "a.b.c.d";
-> var eleId = triggerElementID;//.replace(/\./g, "\\\\.");
undefined
-> eleId
"a.b.c.d"
在开发人员控制台中测试它也支持这一理论

Edit:没有看到.replace()调用在上述代码中被注释掉。在未注释时正常工作…

jQuery使用CSS3选择器引擎。这将把它们转换为
a.b.c.d
链接选择器,其中
具有类的传统含义。因此,这相当于:

a with [a class of] b [and a class of] c [and a class of] d
现在sizzle和jQuery确实意味着支持转义选择器(请参阅),但应该使用两个反斜杠转义。(
\\

如果jQuery尽管试图转义选择器,但仍然说选择器是
a.b.c.d
,那么您的正则表达式似乎有问题

-> var triggerElementID = "a.b.c.d";
-> var eleId = triggerElementID;//.replace(/\./g, "\\\\.");
undefined
-> eleId
"a.b.c.d"
在开发人员控制台中测试它也支持这一理论


Edit:没有看到.replace()调用在上述代码中被注释掉。未注释时正常工作…

当我遇到此问题时,我能够使用此选项:

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

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

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

替换字符串中的斜杠太多

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

替换字符串中的斜杠太多

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

您应该将XML文档中的
“路径”中的点更改为更合理的点,如连字符或下划线。您是否可以将“id”设置为下划线而不是点,然后在执行选择器之前将点替换为下划线?如果您更改
“路径”中的点,将会起作用从XML文档中的
到更合理的东西,如连字符或下划线。你能用下划线而不是点来设置“id”,然后在进行选择之前用下划线替换点吗?这会起作用的。哦,我喜欢这个解决方案+1ohh,我喜欢这个解决方案+1<代码>->“a.b.c.d.”替换(/\./g,“\\\\”)
“a\\.b\\.c\\.d”
->“a.b.c.d.”替换(/\./g,“\\”)
“a\.b\.c\.d”
它们需要用两个斜杠转义,需要额外的斜杠才能转义斜杠本身。虽然它确实起作用,但这是未记录的行为,他们真的应该用两个来逃避+1d因为它无论如何都有效,所以我太匆忙了;)这就是OP尝试的,但没有成功。您只需要字符串文本中的两个斜杠,jQuery只需要实际字符串中的一个斜杠。@melc-请参阅我的注释,它是,并且不应该依赖于realllyyy。我认为文档描述了如何按字面意思键入带有特殊字符的选择器。您必须键入
$(“#a\\.b\\.c\\d”)
,因为Javascript在解析时会删除其中一个斜杠。结果是jQuery只看到一个斜杠。如果动态创建选择器,则不需要创建两个斜杠。啊,这很好地解释了该行为+1<代码>->“a.b.c.d.”替换(/\./g,“\\\\”)
“a\\.b\\.c\\.d”
->“a.b.c.d.”替换(/\./g,“\\”)
“a\.b\.c\.d”
它们需要用两个斜杠转义,需要额外的斜杠才能转义斜杠本身。虽然它确实起作用,但这是未记录的行为,他们真的应该用两个来逃避+1d因为它无论如何都有效,所以我太匆忙了;)这就是OP尝试的,但没有成功。您只需要字符串文本中的两个斜杠,jQuery只需要实际字符串中的一个斜杠。@melc-请参阅我的注释,它是,并且不应该依赖于realllyyy。我认为文档描述了如何按字面意思键入带有特殊字符的选择器。您必须键入
$(“#a\\.b\\.c\\d”)
,因为Javascript在解析时会删除其中一个斜杠。结果是jQuery只看到一个斜杠。如果动态创建选择器,则不需要创建两个斜杠。啊,这很好地解释了该行为+1.