2013-02-23 31 views
2

我有一个奇怪的问题。如果使用无效/非标准HTML属性(用于数据),会发生什么情况?

但是,我想知道当我在html 5上使用无效属性时会发生什么?

例如,如果我想在标签上添加attr'City'。

<div data-city="etc"></div> 

是有效的方法。

然而,有工作完美罚款这种方式

<div city="etc"></div> 

我想知道的是,我不应该使用'city'代替'data-city'结果?

如果仅用于传递javascrpit的数据,我是否可以只使用'城市'?

非常感谢您的建议。

+3

会发生什么情况?在浏览器中?在验证器中?在脚本中? – j08691 2013-02-23 04:45:51

+0

一般写作的html ...我不知道..我想知道如果只是用于传递数据,我可以只使用'城市'? – Till 2013-02-23 04:47:15

回答

2

不幸的是,这是不正确的。然而,所有(现代)浏览器都可以(因为能够显示并保存在DOM中),因为它们努力与所有(甚至是糟糕的)HTML代码兼容,但它不会是真正的属性。您的代码不会验证为真正的W3规范HTML 5代码,但它仍然可以工作。

如果您需要使用'城市',您可能需要使用XHTML,您可以在其中为自己的元素指定自己的属性。

+0

非常感谢你! – Till 2013-02-23 04:56:30

+2

无法保证某些浏览器(或未来的规范)不会将'city'识别为属性名称,可能具有令人惊讶的意义。 XHTML不允许自己的属性超过HTML;尝试使用任何已发布的XHTML文档。 – 2013-02-23 06:28:29

3

唯一会发生的是它不会验证。

Javascript仍然能够找到它。虽然有一些数据特定的功能可能无法使用。

证明:http://jsbin.com/ujusel/1/edit

+0

非常感谢,我正在检查jsbin,但是,我只是太noob。请问数据特定功能在哪里? – Till 2013-02-23 04:55:50

5

在HTML 4.01规范的Notes on invalid documents中建议,如果浏览器“遇到一个它无法识别的属性,它应该忽略整个属性规范(即属性和它的值)”和“提供[s]支持通知用户这种错误“。

实际上,只要考虑HTML,浏览器就会忽略未知属性。但是,他们不会在CSS中忽略它们;在现代浏览器中,像[city]这样的属性选择器匹配该元素。他们不忽视它们在JavaScript,但使用的是符合属性city不会成为元素节点的属性区别对待,但它成为attributes属性的属性,因此它可以通过getAttributesetAttribute方法一起使用。

此类处理违反了HTML 4.01规范,并不保证它会在所有浏览器上发生。 HTML5草案似乎没有解决这个问题:它们指定了处理分析错误和过时特征的规则,但未规定未定义的属性。

而且,有一天一些未来的规范,或一些浏览器,可能会开始识别city作为属性名称,可能是严重与你的想法相冲突的方式。使用一个神秘的名字可能会使这种冲突的可能性非常小。但使用data-city可以避免此问题,因为data-*属性用于特定于站点的扩展,并且保证永远不会与任何标准属性发生冲突。

+2

贞操:这种处理不违反HTML 4.01规范,因为关于无效文档的注释不是规范性的。 – Alohci 2013-02-23 11:08:37

相关问题