Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么会使jQuery无法通过其id获取dom?_Javascript_Jquery_Html_Dom - Fatal编程技术网

Javascript 什么会使jQuery无法通过其id获取dom?

Javascript 什么会使jQuery无法通过其id获取dom?,javascript,jquery,html,dom,Javascript,Jquery,Html,Dom,当我使用 alert(j(this).attr("id")); 我可以看到弹出窗口显示\u面额[3].id.densionid 但是当我打电话的时候 alert(j('#_denominations[3].id.denominationId').attr("id")); 弹出窗口显示“未定义”,实际的html DOM如下所示: <div class="form-field"> <select id="_denominations[3].id.denomination

当我使用

alert(j(this).attr("id"));
我可以看到弹出窗口显示
\u面额[3].id.densionid

但是当我打电话的时候

alert(j('#_denominations[3].id.denominationId').attr("id"));
弹出窗口显示“未定义”,实际的html DOM如下所示:

<div class="form-field">
    <select id="_denominations[3].id.denominationId" class="removableDenom" name="denominations[3].id.denominationId">
</div>


因此,有什么可能会出现
未定义的
弹出窗口

尝试转义ID值本身中的句点和括号。所以你的价值观是:

'#_denominations[3].id.denominationId'
变成

'#_denominations\\[3\\]\\.id\\.denominationId'
jQuery很可能把它们与类和属性选择器混淆了


示例:

您需要转义ID中的特殊字符。即
[
]
。。。。因为jquery将
[]
作为属性选择器,将
作为类选择器

试试这个

alert(j('#_denominations\\[3\\]\\.id\\.denominationId').attr("id"));

jQuery假设这些
[[]
是属性选择器,而不是ID的一部分;必须逃脱<代码>[]
在HTML5之前的HTML ID中,这可能会给您带来其他问题-我看到document.getElementById失败,因为在旧浏览器中,ID以数字开头,例如,即使是HTML5 doctype。

另一个快捷方式

j('[id="_denominations[3].id.denominationId"]')

我强烈建议您简化
id
name
属性

以下内容来自HTML4文档,对于不同版本的HTML可能有所不同:

ID和NAME标记必须以字母([a-Za-z])开头,后面可以是任意数量的字母、数字([0-9])、连字符(“-”)、下划线(“389;”)、冒号(:”)和句点(.”)。


就我个人而言,我只使用字母数字、连字符和下划线字符。我尽量使它们简短而有语义。这不仅对我自己,而且对可能使用我的代码的任何其他开发人员来说都更容易。

我最初的想法是你不能有那些句号和括号。也许吧。我想了一些关于你在转义选择器时需要双斜杠(
\.
)的问题。@Juhana,是的,这也是我的答案。@Jonathan Sampson谢谢你,但是
j(“\\'”+obj.attr('id')).attr('id')
可以不转义地工作吗?@Dreamer是的,但重点是什么
obj
已经是你想要的对象了,为什么还要再次选择它?@Jonathan Sampson我试图提取一个对象id的索引,并使用索引和id模式找到另一个对象。除了需要转义两次之外,一次转义用于JS字符串,一次转义用于jQuery选择器。oooo是。。谢谢你。。更新..HTML5(您链接到HTML4规范)中允许使用括号,句点也必须转义。没有否定的理由,您是正确的。这将起作用,但与直接id选择相比速度非常慢,因为jQuery必须遍历页面上的每个元素,而不是使用本机
getElementById()
.Functional,但它破坏了Sizzle对ID查找的优化,因此它在大型页面上成为一个性能问题。这就是HTML 4。HTML5中允许使用括号。无论如何,这并不能真正回答问题。它可能不能回答问题。然而,如果代码一开始就以良好的标准编写,那么这个问题就不需要问了。@diggersworld谢谢你的建议,我很感激。