当我使用
时alert(j(this).attr("id"));
我可以看到弹出窗口显示_denominations[3].id.denominationId
但是当我打电话时
alert(j('#_denominations[3].id.denominationId').attr("id"));
弹出窗口显示'undefined'
,实际的html DOM如下所示:
<div class="form-field">
<select id="_denominations[3].id.denominationId" class="removableDenom" name="denominations[3].id.denominationId">
</div>
那么可能会发生undefined
弹出的机会
答案 0 :(得分:4)
尝试转义ID值本身的句点和括号。所以你的价值:
'#_denominations[3].id.denominationId'
变为
'#_denominations\\[3\\]\\.id\\.denominationId'
jQuery可能会将这些与类和属性选择器混淆。
答案 1 :(得分:3)
你需要转义ID中的特殊字符.. [
,]
,.
....因为jquery将[]
作为属性选择器而{ {1}}作为类选择器..
试试这个
.
答案 2 :(得分:1)
jQuery假设那些[]
是属性选择器,而不是ID的一部分;必须转义special characters。在HTML5之前的HTML ids中[]
aren't actually allowed,这可能会导致您遇到其他问题 - 我看到document.getElementById失败,因为ID以数字开头,例如,即使是HTML5 doctype也是如此,在较旧的浏览器中。
答案 3 :(得分:1)
另一种捷径。
j('[id="_denominations[3].id.denominationId"]')
答案 4 :(得分:0)
我强烈建议您简化id
和name
属性。
以下内容来自HTML4文档,可能因HTML的不同版本而有所不同:
http://www.w3.org/TR/html4/types.html#type-id
ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").
就个人而言,我只使用字母数字,连字符和下划线字符。我尽量保持简短和语义。这样不仅可以让我自己更容易,也可以让任何其他开发人员更轻松地使用我的代码。