为什么getElementById不需要在表单中获取ID

aur*_*rel 1 html javascript

我正在尝试学习JavaScript以便能够将它与jQuery进行比较.我一直在寻找一个解释(或者证明我正确行事的东西)为什么表单输入中的ID被视为名称属性(以我们选择它们的方式)

<form id="myskills">
    <input type="text" id="skillpg">
</form>
Run Code Online (Sandbox Code Playgroud)

如果我想通过ID获取输入,我会这样做:

document.getElementById('skillpg');
Run Code Online (Sandbox Code Playgroud)

我发现我也可以通过这样做来选择相同的输入

document.getElementById('myskills').skillpg
Run Code Online (Sandbox Code Playgroud)

在我看来,代码使用name="skillpg"而不是ID名称获取输入元素.

当我写这个问题时,听起来像我应该接受它并继续前进.但有没有理由不使用这种方式,只是坚持getElementById或使用name属性而不是ID?

谢谢

Zet*_*eta 5

这是有效的,因为HTMLFormElement有一个特殊的吸气剂:

interface HTMLFormElement : HTMLElement {  
    ...
  readonly attribute HTMLFormControlsCollection elements;
  readonly attribute long length;
  getter Element (unsigned long index);
  getter (RadioNodeList or Element) (DOMString name);
};

getterWIL习惯whenver使用form["name"].因为form.name === form["name"],一切都很好,因为getter 的算法说,你也可以使用id而不是名字:

为命名属性检索索引表单元素时,用户代理必须运行以下步骤:

  1. 让候选者成为一个活动RadioNodeList对象,其中包含所有列出的元素,其表单所有者是具有id属性name属性等于的表单元素name,[...]

现在回到你的问题:

当我写这个问题时,听起来像我应该接受它并继续前进.但有没有理由不使用这种方式,只需坚持使用getElementById或使用name属性而不是ID?

你不应该接受,除非你检查它是a)标准和b)兼容你的目标浏览器.由于它是标准的,您需要检查您的目标浏览器是否兼容.除此之外,它主要是个人偏好.