名称属性在 HTML 文档中是不是必须是唯一的?

Posted

技术标签:

【中文标题】名称属性在 HTML 文档中是不是必须是唯一的?【英文标题】:Does a name attribute have to be unique in a HTML document?名称属性在 HTML 文档中是否必须是唯一的? 【发布时间】:2011-07-27 23:15:44 【问题描述】:

我记得曾经在规范中读过id 属性和name 属性共享相同的命名空间并且必须是唯一的。从那以后,我一直试图在我的应用程序中满足这个要求,甚至害怕将相同的idname 赋予相同的元素。

但最近我开始使用 ASP.NET MVC 3,它(如 php)可以在多个输入控件上使用相同的 name 属性,以在服务器端形成一组值。我试图在规范中查找相关部分 - 但未能找到它。也许我当时误解了什么,或者阅读了错误的文档?

然后呢?我想生成尽可能有效的 html(不同应用程序中的 4.01 和 5)。我可以无所畏惧地使用这个技巧吗?还是我会违反某些东西,应该更好地坚持独特的价值观?

【问题讨论】:

【参考方案1】:

name 属性仅对<form> 和表单元素(<input><textarea><select>)有效。它用于指定 name 以与表单帖子上提交的名称/值对关联。

例如:

<input type="checkbox" name="foo" value="1" />

如果选中将提交foo=1。在 DOM 中,您可以通过将 name 指定为索引来引用 form.elements 集合中的表单元素。如果name 不是唯一的,则集合返回元素数组而不是元素。现代 DOM 支持按名称查找表单元素:

 document.getElementsByName(nameValue)

注意:即使只找到一个元素,它也总是返回一个数组。

id 属性来自 XML 世界,它是任何节点的唯一 ID,而不仅仅是表单元素。与name 属性不同,它在任何HTML 节点上都有效。也像name 属性一样,它必须遵循有效的标识符规则。标识符应该以 alpha 开头,并且只包含 alpha ([a-zA-Z])、数字、连字符、下划线和冒号(注意 ASP.NET 通过以下划线开头的保留 ID 违反了此规则 - 因此它们总是会失败 HTML/XML lint - 实际上一些代理会剥离它们)。要查找id 的任何 HTML 元素,请使用:

document.getElementById(idvalue)

这只会返回一个 DOM 节点。

【讨论】:

啊,I found it!似乎我错过了上下文。 :) 事实上,name 属性适用于一些其他元素,但它只是复制了id 属性,实际上 必须等于它 如果两者都被定义.幸运的是,这不适用于表单元素。 :) 应该注意&lt;a&gt;也使用name属性作为锚文本。 html5中的id和name可以包含除空格以外的任意字符,但必须至少有一个字符:w3.org/TR/html5/dom.html#the-id-attribute【参考方案2】:

ID 应该是唯一的,但您可以使用具有相同名称的多个表单元素。这是单选按钮工作方式的标准,因此您可以强制选择一个单选按钮组。

【讨论】:

【参考方案3】:

name 属性不是唯一的。例如,它用于对单选按钮进行分组。它表示特定表单属性的值。 ids 必须是唯一的。

【讨论】:

以上是关于名称属性在 HTML 文档中是不是必须是唯一的?的主要内容,如果未能解决你的问题,请参考以下文章

jquery怎么获取style里面的属性值

HTML 元素唯一标识 | Id 全局属性

HTML 元素唯一标识 | Id 全局属性

HTML 全局属性

getElementsByName属性

htmlhint 规则详解