基本上"名称"属性用于服务器端编程(名称/值对在请求中发送)和" id"属性用于客户端编程(即Javascript和CSS)。
但两者基本上完成相同的功能 - 提供元素的唯一标识。并且为了使事情变得复杂,如果事物只有一个标识符,那么它就很有用。
因此问题 - 对于需要" id"和"名称":
有没有理由为name和id属性选择不同的标识符?是否存在需要使用不同标识符的用例?语法有什么不同吗? (例如,您可以使用" myarray [123]"作为name属性,PHP将正确理解并创建一个数组,也可以以类似的方式用于Javascript或CSS中的id属性 - 如果不是,那是语法错误还是只是带有括号的有效标识符?)是否区分大小写?
答案 0 :(得分:5)
有没有理由为name和id属性选择不同的标识符?
是。 ID必须是唯一的,名称不必是。对于广播组的成员,名称必须相同,因此他们都不能具有相同的ID,他们可以在实践中通过ID访问元素将是有问题的。如果您不通过ID访问它们,为什么要这样做?
是否存在需要使用不同标识符的用例?
是的,单选按钮。只有一个可以具有与其名称相同的ID。但除此之外,几乎没有限制,比如永远不会给表单控件提供表单本身的方法或属性的名称或id,比如" submit",因为它会掩盖同名的属性。形式。
此外,姓名" _charset_
"和" isindex
"是special。
语法有什么不同吗? (例如,您可以使用" myarray [123]"作为name属性,PHP将正确理解并创建一个数组,也可以以类似的方式用于Javascript或CSS中的id属性 - 如果不是,那是语法错误还是只是带有括号的有效标识符?)
是。 name和id属性值的规则类似,但ID不得包含空格( name 的某些值是特殊的,请参见上文)。 HTML4中的id属性有更多限制(例如,ids不能以数字开头),但实际上它们并未在浏览器中实现。
必须引用一些在名称和ID中有效的字符用作CSS选择器,例如为:
<div id="d[]">
CSS选择器是:
#d\[\]
并与Selectors API一起使用:
#d\\[\\]
(例如document.querySelector('#d\\[\\]')
。
是否区分大小写?
是
答案 1 :(得分:1)
回答标题中的问题:是的,只要元素的语法允许name
属性,其值可能与id
属性值相同。这来自name
属性的声明:它的值是任何字符串,唯一强加的约束与a
元素有关;对于它,要求是name
属性值必须与另一个元素的id
属性值不匹配(但必须匹配{ {1}} 相同元素的属性值(如果存在)。
要解决问题中的假设:表单字段元素中的id
属性确实主要用于服务器端处理;但是对于不同的用途,各种其他元素可能具有name
属性。 name
属性在客户端编程中很有用,但它也具有创建目标锚点的效果,以便可以通过同一文档或其他文档中的链接引用该元素。从技术上讲,没有标签“需要”id
和id
,甚至其中一个;是否使用它们取决于实际目的。 name
属性不必须是唯一的,并不意味着提供唯一标识。例如,您可以使用具有相同name
属性的任意数量的input
元素。
传统上,name
的语法在HTML规范中受到限制,但浏览器更加宽松,HTML5 PR不会产生以下限制:值不能为空(即必须包含至少一个字符),它不能包含空格字符,并且在文档中必须是唯一的(即没有两个元素可以具有相同的id
属性值。)
id
的语法一直是免费的。除name
元素的特殊规则外,唯一的限制是该值不能为空。
a
和id
属性值都区分大小写。由于遗留原因,name
元素的特殊规则强加了不区分大小写的限制。
有许多可能的原因导致您可能希望某个元素的a
和id
不同。例如,当连接到需要字段名称非常冗长且复杂的现有服务器端脚本时,您必须在name
属性中使用它们,但您可以自由选择name
属性。
在编写id
和id
属性值时所做的选择会产生后果,但它们取决于使用值的上下文。例如,如果name
属性值以数字开头,则由于CSS语法(但必须进行转义),它不能直接在CSS选择器中使用。同样,您在JavaScript中使用这些值的方式取决于您使用的语法,但您始终可以参考某些方式。
答案 2 :(得分:1)
name属性通常不需要是唯一的。给定的HTML文档可能有多种形式,每种形式的元素都可能与其他形式的名称相同。
如果您正在使用PHP,请说:
<form>
<input type="text" name="foo[]" />
<input type="text" name="foo[]" />
</form>
会导致PHP将此名称读取为数组,并且所有条目都将包含在其中。名称可以用作非表单元素的属性,但是,它们最常用于表单中。
另一方面,id属性需要能够唯一地标识文档中的给定DOM元素。你不会被迫以这种方式使用它。如果您在两个不同的元素上使用相同的ID,浏览器不会爆炸。但是如果你有两个具有相同id的元素,那么你添加的最后一个元素优先于之前的元素。所以,
document.getElementById( 'foo' )
// or
$( '#foo' )
只返回几个元素。
id可用于标识文档中的任何元素,并且不限于在表单
中