当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\\]")
(就像其他许多人一样,但一起:))