2

编辑

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

我想做的是通过 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,而 console.logthisele打印出这个

[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]
4

3 回答 3

3

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

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

http://jsfiddle.net/tmw63/

于 2013-10-10T16:35:41.623 回答
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

现在嘶嘶作响,因此 jQuery 确实意味着支持转义选择器(请参阅此处),但应该使用两个反斜杠进行转义。( \\)

a.b.c.d如果 jQuery 仍然说选择器在尝试转义它们,那么您的正则表达式可能会出现问题。

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

在开发者控制台中对其进行测试也支持这一理论。

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

于 2013-10-10T16:35:28.607 回答
0

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

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

小提琴

于 2013-10-10T16:37:13.583 回答