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谢谢你的建议,我很感激。