javascript - 为什么 form.id 返回子输入而不是 id?
问题描述
在w3school 规范中,它说它应该返回一个表示元素 id 的字符串。在 Microsoft Edge 42.17134.1.0 和 Firefox 62.0.2 上复制了此问题。
element = document.getElementById('form');
document.getElementById('result').innerHTML = element.id
document.getElementById('getAttributeResult').innerHTML = element.getAttribute('id')
<form id="form">
<input type="hidden" name="id" />
</form>
Result of using .id:
<div id="result">
</div>
<br>
Result of using getAttribute:
<div id="getAttributeResult">
</div>
解决方案
表单元素有一种特殊行为,可以扩展输入名称的属性。来自MDN
命名输入作为属性添加到它们的所有者表单实例中,并且如果它们共享相同的名称,则可以覆盖本机属性(例如,具有输入命名动作的表单将使其动作属性返回该输入而不是表单的动作 HTML 属性)。
如果您更改输入,它将按预期工作。例如:
element = document.getElementById('form');
document.getElementById('result').innerHTML = element.id
document.getElementById('getAttributeResult').innerHTML = element.getAttribute('id')
<form id="form">
<input type="hidden" name="_id" />
</form>
Result of using .id:
<div id="result">
</div>
<br>
Result of using getAttribute:
<div id="getAttributeResult">
</div>
推荐阅读
- java - 如何同步访问 Java Hashmap 中的值?
- javascript - 当使用“nightwatch-api”上下文/客户端调用时,.elements 在黄瓜的 Given/Then 步骤方法中不起作用
- r - 根据列表名称列表重命名列表列表的第一列
- python-3.x - 在Python中返回包含两个元素的列表中另一个元素的快速方法
- rust - Rust 中未解决的导入。找不到箱子
- javascript - 如何将 ScrollView 中的无限内容与 React-Native 对齐?
- java - 我正在尝试读取文本文件并将其存储在对象数组列表中
- cypress - 如何从赛普拉斯的 react-date-picker 中选择或添加日期?
- r - “条件”列不存在。即使该列显然存在?
- google-maps - 中国支持谷歌地图