最近我读到越来越多关于人们在HTML标记中使用自定义属性的文章,主要是为了在javascript代码中嵌入一些额外的数据。
我希望收集一些关于使用自定义属性是否是一种好的实践的反馈,以及有哪些替代方案。
它似乎真的可以简化服务器端和客户端代码,但它也不符合W3C标准。
我们是否应该在web应用中使用自定义HTML属性?为什么或者为什么不呢?
对于那些认为自定义属性是一件好事的人来说:在使用它们时要记住哪些事情?
对于那些认为自定义属性是坏事的人:您使用什么替代方法来完成类似的事情?
更新:我最感兴趣的是各种方法背后的原因,以及为什么一种方法比另一种方法更好。我认为我们都可以想出4-5种不同的方法来完成同样的事情。(隐藏元素,内联脚本,额外的类,从id解析信息,等等)。
更新2:似乎HTML 5数据属性特性在这里有很多支持(我倾向于同意,它看起来是一个可靠的选项)。到目前为止,我还没有看到对这个建议的反驳。使用这种方法有什么问题/陷阱需要担心吗?或者仅仅是对当前W3C规范的“无害”的无效?
We've made a web-based editor that understands a subset of HTML - a very strict subset (that understood nearly universally by mail clients). We need to express things like <td width="@INSWIDTH_42@"> in the database, but we can't have that in the DOM, otherwise the browser where the editor runs, freaks out (or is more likely to freak out than it is likely to freak out over custom attributes). We wanted drag-and-drop, so putting it purely in the DOM was out, as was jquery's .data() (the extra data didn't get copied properly). We probably also needed the extra data to come along for the ride in .html(). In the end we settled on using <td width="1234" rs-width="@INSWIDTH_42@"> during the editing process, and then when we POST it all, we remove width and do a regex search-and-destroy s/rs-width=/width=/g.
起初,写这篇文章的人是这个问题上的验证纳粹,他尝试了所有方法来避免我们的自定义属性,但最后当没有其他方法可以满足我们所有的需求时,他默认了。当他意识到自定义属性永远不会出现在电子邮件中时,这对他有所帮助。我们确实考虑过在课堂上编码我们额外的数据,但认为这是两害相权取其大。
就我个人而言,我更喜欢让东西干净,通过验证等,但作为一名公司员工,我必须记住我的主要责任是推进公司的事业(尽可能快地赚钱),而不是我对技术纯洁性的自私愿望。工具应该为我们工作;我们不是为了他们。
我认为使用现有的XHTML特性而不破坏任何东西或扩展名称空间没有问题。让我们来看一个小例子:
<div id="some_content">
<p>Hi!</p>
</div>
如何在没有附加属性的情况下向some_content添加附加信息?像下面这样添加另一个标签怎么样?
<div id="some_content">
<div id="some_content_extended" class="hidden"><p>Some alternative content.</p></div>
<p>Hi!</p>
</div>
它通过您选择的定义良好的id/扩展名“_extended”及其在层次结构中的位置来保持关系。我经常将这种方法与jQuery一起使用,而不是实际使用Ajax之类的技术。
避免使用自定义属性的最简单方法是使用现有属性。
使用有意义的、相关的类名。
例如,执行如下命令:type='book' and type='cd',
代表书籍和光盘。类更好地表示事物是什么。
如类= '书'
我过去使用过自定义属性,但老实说,如果以语义上有意义的方式使用现有属性,就真的没有必要使用它们了。
举一个更具体的例子,假设你有一个网站,提供不同种类商店的链接。你可以使用以下语句:
<a href='wherever.html' id='bookstore12' class='book store'>Molly's books</a>
<a href='whereverelse.html' id='cdstore3' class='cd store'>James' Music</a>
CSS样式化可以使用如下类:
.store { }
.cd.store { }
.book.store { }
在上面的例子中,我们看到两个都是商店的链接(与网站上其他不相关的链接相反),一个是cd店,另一个是书店。