【发布时间】:2010-11-26 17:22:07
【问题描述】:
id 和 name 属性有什么区别?它们似乎都具有提供标识符的相同目的。
我想知道(特别是关于 HTML 表单)是否有必要或出于任何原因鼓励使用两者。
【问题讨论】:
-
这个最全面的答案是Farhan Shirgill Ansari's answer(没有说明它的正确性)。
标签: html attributes
id 和 name 属性有什么区别?它们似乎都具有提供标识符的相同目的。
我想知道(特别是关于 HTML 表单)是否有必要或出于任何原因鼓励使用两者。
【问题讨论】:
标签: html attributes
name 属性在表单提交中发送数据时使用。不同的控件响应不同。例如,您可能有多个具有不同id 属性但相同name 的单选按钮。提交后,响应中只有一个值 - 您选择的单选按钮。
当然,不仅如此,但它肯定会让你朝着正确的方向思考。
【讨论】:
id 是你的前端(CSS、JS)使用的,而name 是你的服务器接收并可以处理的。这基本上就是 Greeso 的回答所说的。
为表单控件使用name 属性(例如<input> 和<select>),因为这是在表单提交时发生的POST 或GET 调用中使用的标识符。
当您需要使用 CSS、JavaScript 或 a fragment identifier 处理特定 HTML 元素时,请使用 id 属性。也可以按名称查找元素,但通过 ID 查找元素是 simpler and more reliable。
【讨论】:
name 和 id 之间根本没有必然联系。该标识符唯一地标识页面上的特定 HTML 元素。相比之下,HTML 表单元素的name 属性不必是唯一的,而且通常不是唯一的,例如单选按钮或具有多个<form> 元素的页面。对name 和id 使用相同的字符串是传统的做法,它们都用于单个 HTML 元素,但没有什么能让你这样做。
id用于通过Document标识HTML元素
对象模型(通过 JavaScript 或 CSS 样式)。 id 预计
在页面中是唯一的。
name对应form元素,标识发布的内容
返回服务器。
【讨论】:
我的想法和使用方式很简单:
id 用于 CSS 和 JavaScript/jQuery(它必须在页面上是唯一的)。
当通过 HTML 提交表单时,name 用于服务器上的表单处理(它在表单中必须是唯一的 - 在某种程度上,请参阅下面的 Paul 的评论)。
【讨论】:
有什么区别?简短的回答是,两者都用,不用担心。但如果你想了解这种愚蠢,这里是瘦的:
id= 用作这样的目标:
<some-element id="XXX"></some-element>用于这样的链接:<a href="#XXX"。
name= 还用于标记消息中的字段,当您在表单中点击提交时,使用 HTTP(超文本传输协议)GET 或 POST 发送到服务器。
id= 标记供 JavaScript 和 Java DOM(文档对象模型)使用的字段。 name= 中的名称在表单中必须是唯一的。 id= 中的名称在整个文档中必须是唯一的。
有时 name= 和 id= 名称会有所不同,因为服务器期望同一文档中的各种形式或与上面示例中的形式相同的各种单选按钮具有相同的名称。 id= 必须是唯一的; name= 不能是。
JavaScript 需要唯一的名称,但是这里已经有太多的文档没有唯一的 name= 名称,所以 W3 人发明了要求唯一的 id 标签。不幸的是,旧的浏览器不理解它。因此,您的表单中需要两种命名方案。
注意:<a> 等标签的属性“名称”在HTML5 中不受支持。
【讨论】:
name 对于<form> 提交中的<input> 标记很重要,因为HTTP 中使用了参数,而id 只是一个唯一标识符
ID 标签 - CSS 使用,定义 div、span 或其他元素的 unique 实例。出现在 JavaScript DOM 模型中,允许您通过各种函数调用访问它们。
字段的 Name 标记 - 每个 form 都是唯一的 - 除非您正在执行要传递给 PHP/服务器端处理的数组。您可以通过 JavaScript 按名称访问它,但我认为它不会作为节点出现在 DOM 中,或者可能存在一些限制(例如,如果我没记错的话,您不能使用 .innerHTML)。
【讨论】:
通常,假设 name 总是被 id 取代。这在某种程度上是正确的,但实际上对于表单字段和框架名称 而言并非如此。例如,对于表单元素,name 属性用于确定要发送到服务器端程序的 名称-值对,不应将其删除。 浏览器不会以这种方式使用 id。为了安全起见,您可以在表单元素上使用 name 和 id 属性。因此,我们将编写以下内容:
<form id="myForm" name="myForm">
<input type="text" id="userName" name="userName" />
</form>
为确保兼容性,在定义了 name 和 id 属性值时匹配两者是个好主意。但是,请注意 - 某些标签,尤其是单选按钮,必须具有非唯一的 name 值,但需要唯一的 id 值。
再次强调,id 不仅仅是 name 的替代品;它们的目的不同。此外,不要忽视旧式方法,深入了解现代库会发现这种语法风格有时用于性能和易用性目的。您的目标应该始终支持兼容性。
现在在大多数元素中,name 属性已被弃用,取而代之的是更普遍的 id 属性。但是,在某些情况下,尤其是表单字段(<button>、<input>、<select> 和 <textarea>),name 属性仍然存在,因为它仍然需要设置表单提交的名称-值对。此外,我们发现某些元素,尤其是框架和链接,可能会继续使用 name 属性,因为它通常对于按名称检索这些元素很有用。
id 和 name 之间有明显的区别。很多时候,当 name 继续时,我们可以将值设置为相同。然而,id 必须是唯一的,而 name 在某些情况下不应该——想想单选按钮。可悲的是,id 值的唯一性,虽然被标记验证所捕获,但并不像应有的那样一致。浏览器中的 CSS 实现将为共享 id 值的对象设置样式;因此,在运行时之前,我们可能无法捕获可能影响 JavaScript 的标记或样式错误。
这摘自 Thomas-Powell 的 JavaScript - The Complete Reference 一书。
【讨论】:
name 应该相同(服务器端代码不关心提交的是哪个),但id 必须不同(因为它必须在整个页面中是唯一的)。
<form action="demo_form.asp">
<label for="male">Male</label>
<input type="radio" name="sex" id="male" value="male"><br>
<label for="female">Female</label>
<input type="radio" name="sex" id="female" value="female"><br>
<input type="submit" value="Submit">
</form>
【讨论】:
下面的论坛帖子有相同基本问题的答案,但基本上,id 用于脚本识别,name 用于服务器端。
【讨论】:
name 不推荐用于链接目标,并且在 HTML5 中无效。它至少在最新的 Firefox (v13) 中不再有效。将<a name="hello"> 更改为 <a id="hello">。
目标不必是<a> 标记。它可以是<p id="hello"> 或<h2 id="hello"> 等,通常是更简洁的代码。
正如其他帖子所说的那样,name 仍然在表单中使用(需要)。 META标签中仍然使用它。
【讨论】:
a标签name属性已被弃用,但包括Firefox在内的浏览器仍然支持它,所以答案不正确。是的,对于锚点(目标位置),您现在应该在元素上使用 id (<h2 id="hello">),但这并不是 OP 真正要求的。
名字
<button>、<form>、<fieldset>、<iframe>、
<input>, <keygen>, <object>, <output>, <select>, <textarea>, <map>,
<meta> 和 <param>
【讨论】:
name 属性用于样式元素。我认为这是无效的?
表单输入元素的 ID 与元素中包含的数据无关。 ID 用于将元素与 JavaScript 和 CSS 挂钩。但是,name 属性在浏览器向服务器发送的 HTTP 请求中用作与 value 属性中包含的数据相关联的变量名。
例如:
<form>
<input type="text" name="user" value="bob">
<input type="password" name="password" value="abcd1234">
</form>
当提交表单时,表单数据会包含在 HTTP 头中,如下所示:
如果添加 ID 属性,它不会更改 HTTP 标头中的任何内容。它只会让它更容易与 CSS 和 JavaScript 挂钩。
【讨论】:
<body>
<form action="">
<label for="username">Username</label>
<input type="text" id="username" name="username">
<button>Submit!</button>
</form>
</body>
正如我们在这里看到的,“id”和“for”元素是相互关联的。如果您单击标签(用户名),则输入字段将突出显示(这对移动用户很有用,被认为是一种很好的做法)。
另一方面,“名称”元素在提交表单时很有用。无论您在输入字段中输入什么,它都会显示在 URL 上。请看附图。
【讨论】:
如果您不使用表单自己的提交方法向服务器发送信息(而是使用 JavaScript),您可以使用 name 属性将额外信息附加到输入 -就像将它与隐藏的输入值配对,但它看起来更整洁,因为它被合并到输入中。
这个位目前在 Firefox 中仍然有效,尽管我想将来它可能不会被允许通过。
只要您不打算提交老式的方式,您可以有多个具有相同名称值的输入字段。
【讨论】:
身份证:
名称 对应于表单元素并标识回发到服务器的内容。
例子:
<form action="action_page.php" id="Myform">
First name: <input type="text" name="FirstName"><br>
<input type="submit" value="Submit">
</form>
<p>The "Last name" field below is outside the form element, but still part of the form.</p>
Last name: <input type="text" name="LastName" form="Myform">
【讨论】:
ID 用于唯一标识一个元素。
Name 用于表单。尽管您提交了表单,但如果您不提供任何名称,则不会提交任何内容。因此,表单元素需要一个名称才能被“get 或 push”等表单方法识别。
并且只有具有 name 属性的才会消失。
【讨论】:
在这个问题一直存在的所有时间里,我很懊恼(也许有点难过)没有人想到提到accessibility,尽管它总是很重要,但一直在不断获得管理和软件工程师的支持(仅来自我个人的观察;没有确凿的数据支持)。
我可以提供的一个统计数据是 (source):
因此,对可访问性缺陷的认识呈现出稳步增长的趋势。同一参考文献提到,从这些数字中可以看出,每小时至少会提起一场诉讼!
那么可访问性对name 和id 有何影响?
根据World Wide Web Consortium (W3C):
标签的
for属性必须与标签的id完全匹配 表单控件。
【讨论】:
根据个人经验,根据W3Schools属性描述:
ID 是一个全局属性,几乎适用于 HTML 中的所有元素。它用于唯一标识网页上的元素,其值主要是从前端访问(通常通过 JavaScript 或 jQuery)。
name 是对 HTML 中的特定元素(如表单元素等)有用的属性。它的值主要是发送到后端进行处理。
【讨论】:
下面是 id 属性的一个有趣用法。它在
边界之外的 元素的表单,以便它们将包含在表单内的其他 字段中。 <form action="action_page.php" id="form1">
First name: <input type="text" name="fname"><br>
<input type="submit" value="Submit">
</form>
<p>The "Last name" field below is outside the form element, but still part of the form.</p>
Last name: <input type="text" name="lname" form="form1">
【讨论】:
id 和 name 之间没有字面上的区别。
name 是一个标识符,在浏览器发送的 HTTP 请求中用作一个变量名,与元素的 value 属性中包含的数据相关联。
另一方面,id 是浏览器、客户端和 JavaScript 的唯一标识符。因此表单需要一个id,而它的元素需要一个name。
id 更具体地用于向唯一元素添加属性。在 DOM 方法中,Id 在 JavaScript 中用于引用您希望执行操作的特定元素。
例如:
<html>
<body>
<h1 id="demo"></h1>
<script>
document.getElementById("demo").innerHTML = "Hello World!";
</script>
</body>
</html>
同样可以通过name属性来实现,但是最好在表单中使用id,而name用于像输入标签或选择标签这样的小表单元素。
【讨论】:
id 会给元素一个 id,所以一旦你写了真正的代码(比如 JavaScript),你就可以使用 id 来读取元素。 name 只是一个名称,所以用户可以看到元素的名称,我猜。
示例:
<h1 id="heading">text</h1>
<script>
document.getElementById("heading"); // Reads the element that has the id "heading".
</script>
// You can also use something like this:
document.getElementById("heading").value; // Reads the value of the selected element.
【讨论】:
document.querySelector('[name="heading"]')(继续举例)。