HTML:对于name和id属性,始终可以使用相同的标识符吗?

时间:2014-10-14 05:53:02

标签: javascript html css

基本上"名称"属性用于服务器端编程(名称/值对在请求中发送)和" id"属性用于客户端编程(即Javascript和CSS)。

但两者基本上完成相同的功能 - 提供元素的唯一标识。并且为了使事情变得复杂,如果事物只有一个标识符,那么它就很有用。

因此问题 - 对于需要" id"和"名称":

有没有理由为name和id属性选择不同的标识符?是否存在需要使用不同标识符的用例?语法有什么不同吗? (例如,您可以使用" myarray [123]"作为name属性,PHP将正确理解并创建一个数组,也可以以类似的方式用于Javascript或CSS中的id属性 - 如果不是,那是语法错误还是只是带有括号的有效标识符?)是否区分大小写?

3 个答案:

答案 0 :(得分:5)

  

有没有理由为name和id属性选择不同的标识符?

是。 ID必须是唯一的,名称不必是。对于广播组的成员,名称必须相同,因此他们都不能具有相同的ID,他们可以在实践中通过ID访问元素将是有问题的。如果您不通过ID访问它们,为什么要这样做?

  

是否存在需要使用不同标识符的用例?

是的,单选按钮。只有一个可以具有与其名称相同的ID。但除此之外,几乎没有限制,比如永远不会给表单控件提供表单本身的方法或属性的名称或id,比如" submit",因为它会掩盖同名的属性。形式。

此外,姓名" _charset_"和" isindex"是special

  

语法有什么不同吗? (例如,您可以使用" myarray [123]"作为name属性,PHP将正确理解并创建一个数组,也可以以类似的方式用于Javascript或CSS中的id属性 - 如果不是,那是语法错误还是只是带有括号的有效标识符?)

是。 nameid属性值的规则类似,但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属性在客户端编程中很有用,但它也具有创建目标锚点的效果,以便可以通过同一文档或其他文档中的链接引用该元素。从技术上讲,没有标签“需要”idid,甚至其中一个;是否使用它们取决于实际目的。 name属性必须是唯一的,并不意味着提供唯一标识。例如,您可以使用具有相同name属性的任意数量的input元素。

传统上,name的语法在HTML规范中受到限制,但浏览器更加宽松,HTML5 PR不会产生以下限制:值不能为空(即必须包含至少一个字符),它不能包含空格字符,并且在文档中必须是唯一的(即没有两个元素可以具有相同的id属性值。)

id的语法一直是免费的。除name元素的特殊规则外,唯一的限制是该值不能为空。

aid属性值都区分大小写。由于遗留原因,name元素的特殊规则强加了不区分大小写的限制。

有许多可能的原因导致您可能希望某个元素的aid不同。例如,当连接到需要字段名称非常冗长且复杂的现有服务器端脚本时,您必须在name属性中使用它们,但您可以自由选择name属性。

在编写idid属性值时所做的选择会产生后果,但它们取决于使用值的上下文。例如,如果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可用于标识文档中的任何元素,并且不限于在表单