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

Mik*_*cic 73 javascript jquery dom ruby-on-rails

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

something[500]
Run Code Online (Sandbox Code Playgroud)

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

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

alert($("#something["+id+"]").parent().parent().attr("id"));
Run Code Online (Sandbox Code Playgroud)

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

$("#something["+id+"]")
Run Code Online (Sandbox Code Playgroud)

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

任何帮助将不胜感激.

kar*_*m79 100

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

alert($("#something\\["+id+"\\]").parent().parent().attr("id"));
Run Code Online (Sandbox Code Playgroud)

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

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


ste*_*red 10

你也可以

$('[id="something['+id+']"]')
Run Code Online (Sandbox Code Playgroud)


Pet*_*ley 9

方括号对jQuery选择器具有特殊含义,特别是属性过滤器.

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

$( "#something\\[" + id + "\\]" )
Run Code Online (Sandbox Code Playgroud)


Que*_*tin 9

id 不能包含方括号.它是在规范中禁止的.

某些浏览器可能错误正确并且可以应对,但您应该修复数据而不是尝试处理错误数据.

  • 从HTML5开始,这不再适用.http://www.w3.org/TR/html5/dom.html#the-id-attribute. (9认同)
  • @BryanAgee - 不,不.`name`属性的值不是`NAME`标记. (2认同)