向HTML元素添加元数据的最佳方法

jon*_*bbs 17 html css jquery expando

我正在尝试整合一种在HTML中标记各种组件的方法,这些组件由jQuery脚本解析并在页面加载时创建.

例如,目前我可以将以下内容放入我的页面..

<a href="link.html" class="Theme-Button Theme-Button-Style-win2007 Theme-Button-iconLeft Theme-Button-AlignmentCenter Theme-Button-fullWidth">This is a button</a>
Run Code Online (Sandbox Code Playgroud)

当jQuery脚本找到它时,它会注入创建一个带有图标的按钮所需的html以及所有必要的事件等.

但是,这很麻烦,需要很多长类名.我宁愿做这样的事......

<a href="#" class="Theme-Button" data="{style: 'win2007', icon: 'left', align:'center', fullWidth: true}"></a>
Run Code Online (Sandbox Code Playgroud)

它不是那么短,但在我看来更整洁,需要更少的解析.麻烦的是,我已经对"expandos"进行了一些研究,我相当肯定有些浏览器会不喜欢它并且它不会验证.

有人有更好的建议吗?

T.J*_*der 28

继续使用属性,但data-在其上使用前缀.从HTML5开始,所有元素data-明确允许带有前缀的属性.例:

<a href="#" class="Theme-Button" data-theme="{style: 'win2007', icon: 'left', align:'center', fullWidth: true}"></a>
Run Code Online (Sandbox Code Playgroud)

它现在适用于所有浏览器(虽然W3验证器可能会抱怨它的HTML5支持还没有为黄金时段做好准备),并且因为它现在已经指定了行为,所以它具有前瞻性.

  • @Felix:很好.几乎任何浏览器都可以正常工作,定义自己的属性唯一真正的问题是它导致了验证错误(如果你正在验证),它没有在任何地方指定(理论上,UAs可以忽略它们而不是使它们可用于JS层或CSS,虽然显然没有),当然存在与新定义的属性冲突的风险.关于HTML5形式化的好处在于它一下子解决了这些问题.但你不必等待,现在工作正常,即使在IE6上也是如此. (3认同)