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

时间:2009-08-06 14:04:31

标签: javascript jquery ruby-on-rails dom

我有一个ID元素类似于:

的DOM元素
something[500]

由我的Ruby on Rails应用程序构建。我需要能够通过jQuery获取这个元素,以便我可以遍历DOM以删除它的父级的父级,它具有我之前无法访问的变量ID。

有谁知道我怎么能这样做?以下代码似乎不起作用:

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

经过进一步检查,以下内容:

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

返回一个对象,但当我在其上运行“.html()”或“.text()”时,结果总是为null或只是一个空字符串。

非常感谢任何帮助。

7 个答案:

答案 0 :(得分:96)

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

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

See Special Characters In Selectors,特别是第二段:

  

要使用任何元字符(例如!"#$%&'()*+,./:;<=>?@[\]^``{|}~)作为名称的文字部分,必须使用两个反斜杠进行转义:\\。例如,具有id="foo.bar"的元素可以使用选择器$("#foo\\.bar")。 W3C CSS规范包含complete set of rules regarding valid CSS selectors。同样有用的是Mathias Bynens在CSS character escape sequences for identifiers上的博客文章。

答案 1 :(得分:9)

方括号对jQuery selectors具有特殊含义,属性具体过滤。

只是逃避这些,它会发现你的元素很好

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

答案 2 :(得分:9)

ID 不能包含方括号。它是forbidden by the spec

某些浏览器可能会出错并且应对错误,但您应修复数据而不是尝试处理错误数据。

答案 3 :(得分:9)

您也可以

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

答案 4 :(得分:4)

试试这个:

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

答案 5 :(得分:3)

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

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

答案 6 :(得分:3)

“任何元字符

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

作为名称的文字部分,必须使用两个反斜杠进行转义:\\

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

$("#foo\\.bar")

“[source:jquery doc],以及id =”foo [bar]“的元素(即使对W3C无效但由JQuery识别),也可以使用选择器

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

(就像许多其他人一样,但是所有人都在一起:))