2

当我使用

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弹出

4

5 回答 5

4

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

'#_denominations[3].id.denominationId'

变成

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

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

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

于 2013-03-23T17:50:56.377 回答
3

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

试试这个

alert(j('#_denominations\\[3\\]\\.id\\.denominationId').attr("id"));
于 2013-03-23T17:51:26.783 回答
1

jQuery 假设这些[]是属性选择器,而不是 ID 的一部分;特殊字符必须转义。[] 在 HTML5 之前实际上不允许在 HTML id 中使用,这可能会导致您以后遇到其他问题 - 我已经看到 document.getElementById 失败,因为 ID 以数字开头,例如,即使在旧版浏览器中使用 HTML5 doctype .

于 2013-03-23T17:51:59.193 回答
1

另一个捷径。

j('[id="_denominations[3].id.denominationId"]')
于 2013-03-23T18:02:58.523 回答
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 (".").

就我个人而言,我只使用字母数字、连字符和下划线字符。我尽量保持它们简短和语义化。这不仅让我自己更容易,也让其他可能使用我的代码的开发人员更容易。

于 2013-03-23T18:04:35.183 回答