是什么让jQuery无法通过它的id获得dom?

时间:2013-03-23 17:49:27

标签: javascript jquery html dom

当我使用

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弹出的机会

5 个答案:

答案 0 :(得分:4)

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

'#_denominations[3].id.denominationId'

变为

'#_denominations\\[3\\]\\.id\\.denominationId'

jQuery可能会将这些与类和属性选择器混淆。

示例:http://jsfiddle.net/jonathansampson/ZUMna/

答案 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)

我强烈建议您简化idname属性。

以下内容来自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 (".").

就个人而言,我只使用字母数字,连字符和下划线字符。我尽量保持简短和语义。这样不仅可以让我自己更容易,也可以让任何其他开发人员更轻松地使用我的代码。