平时会看到这样的代码,由于本地没有 Model,需要存取的数据就只好放在DOM上,最常见的莫过于列表项了:
<div class="list-item" data-name="{{name}}">
data-name 作为 JS-Hook(钩子)可以很方便的被JS取到。
var name = $('.list-item').attr('data-name');
但是,在大谈 MV 应该分开的今天,在 DOM 上存放数据:
这是否仍然是一个好方法?
该如何理解?
是否有其无可替代的优势?
SegmentFault 用得不多,过来补充一下在知乎提问得到的高票答案,非常赞同:
贺老答的,答案链接:http://zhi.hu/aLuG
贺师俊,Web开发者
既然标准增加了 data- 就是表示,在DOM存放数据是合理的 use cases。但是,具体案例中,使用 data- 是不是合适,不能一概而论。
常见的误用 data-* 的情况:
在HTML中已有更适合的特定属性。比如语义细化应该用class,而不是data-*;已经有title属性,不需要用data-tooltip。
data-是特定于网站/应用的,如果是要作为通用协议的(比如提供给第三方),不应该用data-,而应该考虑microdata、rdfa或microformats。
库用 data-* 应该加入 namespace 以避免冲突。这一点许多库(比如bootstrap)做得不好。
前端MV框架通常并不需要你手动用data-,因为DOM和数据的关联是由框架管理的,但是框架可能内部使用data-作为实现手段。而你用MV框架的同时又使用bootstrap,那么bootstrap中component所需的data-你还是得写,因为那些data-是bootstrap的私有属性,跟MV*没有关系。