2010-01-22 63 views
15

我觉得它像设置属性arbitary非常方便:使用非标准HTML属性被认为是不好的做法吗?

<a stackoverflowId="123">...</a> 

而且在JavaScript:

var soId = $selectofA.attr('stackoverflowId'); //jQuery 

它是一个很好的做法呢?我从来没有遇到过这个问题。

+0

也许如果你描述你需要这个东西,因为我们可以建议的解决方法。严格的答案应该是NO,但总会有一个似乎要求违反规则的角落案例。 – 2010-01-22 14:41:45

+3

我认为可以打破“规则”的案例不仅仅是角落案例。 – AnthonyWJones 2010-01-22 14:45:44

+1

这是一个常见问题解答:http://stackoverflow.com/search?q=custom+html+attribute – dreftymac 2010-01-22 15:14:40

回答

17

在HTML 5,你可以用data-*属性做到这一点:

<a id="myDiv" data-stackoverflowId="123">...</a> 

由于您使用jQuery,你可能还需要检查jQuery Metadata Plugin。它将允许您在类属性中存储和解析JSON元数据,并且您的标记仍将进行验证。

您将能够插入元数据是这样的:

<a class="your_class {stackoverflowId: '123'}">...</a> 

,并按如下提取它:

var data = $selectofA.metadata(); 
+0

事实上,我不太在乎HTML5,但是与浏览器和开销的兼容性(所以它是更好地使用更少的插件)。 – user198729 2010-01-22 14:55:18

+4

如果你想与当前的浏览器兼容,你正在做什么可以在所有流行的浏览器中工作......但是使用有效的标记可以帮助你保持与当前的**和未来的**浏览器兼容。 – 2010-01-22 14:58:06

+5

说真的,元数据的方法不是侮辱受伤吗?现在我们有一个类的属性值,它可以是CDATA,符合HTML和XHTML规范,但这与大多数浏览器期望的类名或类名列表相差甚远。我不会打赌我的cookies不会干扰类属性的正常行为。 – 2010-01-22 15:20:46

7

如果使用data-属性,它至少是有效的HTML5。请参阅John Resig's blog post on the subject.

+4

+1这是HTML5小组的承认,人们无论如何都这样做,所以我们不妨将其标准化。比现在人们大量地重载类属性要好得多。 – 2010-01-22 14:59:02

+0

另请参阅:http://ajaxian.com/archives/custom-dom-attributes-vs-class-css-styles – dreftymac 2010-01-22 15:20:23

1

我一直这样做,它很棒。从来没有遇到过这种技术的任何问题。我想它不是一个坏主意,但使用data-前缀就像在某些答案中所建议的那样。

如果您对标准合规性非常偏执,您可以以符合标准的方式编写HTML,并在脚本中设置DOM上的属性。至少,该文件将被验证。但由于最终的结果将是相同的,你必须非常不满,才能采用IMO自然的方式来扩展HTML,因为它适合你。

另一种方法是编写一个自定义DTD,该DTD准确定义要使用的扩展名。这种方法在这里详细描述:http://www.alistapart.com/articles/customdtd/

基本上这种方法依赖于在某处放置XHTML DTD的修改副本,并使用指向该定制DTD的文档类型。您可以在修改后的DTD中定义额外的属性声明,显然,w3c验证器实际上将使用该DTD进行验证。

但是,我不会使用这种方法为正常的互联网面临的网站,永远。恐怕有些浏览器可能会尽力验证文档是否对我的dtd进行了验证,但是后来在某处中途放弃了一处错误。这种自定义的DTD技术并不是非常普遍,我根本不会冒这个常规网页的机会。

相关问题