当ID包含方括号时,通过ID查找DOM元素?

我有一个类似于ID的DOM元素:

something[500] 

它是由我的Ruby on Rails应用程序构build的。 我需要能够通过jQuery得到这个元素,以便我可以遍历我的方式去删除它的父母的父母,它有一个我没有预先访问的variablesID。

有谁知道我怎么能这样做呢? 下面的代码似乎不工作:

 alert($("#something["+id+"]").parent().parent().attr("id")); 

进一步检查后,如下:

 $("#something["+id+"]") 

返回一个对象,但是当我运行“.html()”或“.text()”时,结果总是为空或者只是一个空string。

任何帮助将不胜感激。

您需要转义方括号,以便它们不被视为属性select器。 尝试这个:

 alert($("#something\\["+id+"\\]").parent().parent().attr("id")); 

请参阅select器中的特殊字符 ,特别是第二段:

要使用任何元字符(如!"#$%&'()*+,./:;<=>?@[\]^``{|}~ )作为名称的文字部分,它必须用两个反斜杠转义:例如,一个id="foo.bar"的元素可以使用select符$("#foo\\.bar") 。W3C CSS规范包含完整的关于有效的CSSselect器的规则集还有用的是Mathias Bynens关于标识符的CSS字符转义序列的博客条目。

方括号对jQueryselect器有特殊的含义,特别是属性filter。

只要逃脱这些,它会发现你的元素好

 $( "#something\\[" + id + "\\]" ) 

一个id 不能包含方括号。 这是规范禁止的 。

有些浏览器可能会错误地纠正和应付,但是您应该修复您的数据,而不是尝试处理错误的数据。

你也可以做

 $('[id="something['+id+']"]') 

尝试这个:

 alert($("#something\\["+id+"\\]").parent()[0].parent()[0].attr("id")); 

你可以用\\来逃避它们,或者你可以做这样的事情…

 $(document.getElementById("something[" + id + "]")) 

“任何元字符

 !"#$%&'()*+,./:;<=>?@[\]^`{|}~ 

作为一个名字的文字部分,必须用两个反斜杠来转义: \\

例如,id =“foo.bar”的元素可以使用select器

 $("#foo\\.bar") 

“[source: jquery doc ]和一个id =”foo [bar]“的元素(即使对W3C无效但被JQuery识别),可以使用select器

 $("#foo\\[bar\\]") 

(就像其他许多人一样,但一起:))