首页 > 在 DOM 上存放数据是否是一个好的解决方案?

在 DOM 上存放数据是否是一个好的解决方案?

平时会看到这样的代码,由于本地没有 Model,需要存取的数据就只好放在DOM上,最常见的莫过于列表项了:

<div class="list-item" data-name="{{name}}"> 

data-name 作为 JS-Hook(钩子)可以很方便的被JS取到。

var name = $('.list-item').attr('data-name');

但是,在大谈 MV 应该分开的今天,在 DOM 上存放数据:
这是否仍然是一个好方法?
该如何理解?
是否有其无可替代的优势?


我认为这个不是存放不存放数据的问题,如果是存放数据可以讨论下cookies和webstorage这些
这完全是一种编码习惯,如果你想让框架使用者完全用html的标签控制一个组件的参数,那么写成data-你的属性名 这种未尝不可
当然如果在标签里写很复杂的东西,比如涉及引号的字符串,还是源生js比较好
至于性能 只要不是太复杂的渲染和回流 近代浏览器下这点开销可以忽略不计了吧 前提是不要拿这个attribute当选择器就行


之所以写成data-是因为jquery有个data方法可以拿到data(),当然也可以换作其他的例如saf-fer,fes-asf同样可以利用attr来拿到,而jquery的data方法则避免的网dom上存数据,直接用jquery.data('key','value')来设置数据和jquery.data('key')来取数据都不会存在dom上
http://www.w3school.com.cn/jquery/data_jquery_data.asp


个人的建议是结构化数据在DOM上存放数据的“主键”,具体数据还是放在JS变量里,通过“主键”去捞对应的数据

这里”主键“可以是数据库主键,也可以是临时的,view里面的idx


优势我觉得就是在逻辑比较简单时,可以直接塞到dom上;
如果dom被复制了,这部分数据也就复制过去了;

如果复杂的话,还是自己想个合适的数据结构来存,这样效率高些;操作dom的开销还是比直接操作JS对象高的。


只能说是个解决方案,哪能加个“好”字
存放数据现代浏览器有专门的功能,html5 的 indexdb 接口就是做这事的


只要页面不刷新内存里的东西都还在,频繁操作DOM不好


个人习惯问题,我就不喜欢把数据库挂在dom上,纯粹的mvc才是好的。


SegmentFault 用得不多,过来补充一下在知乎提问得到的高票答案,非常赞同:

贺老答的,答案链接:http://zhi.hu/aLuG

贺师俊,Web开发者

既然标准增加了 data- 就是表示,在DOM存放数据是合理的 use cases。但是,具体案例中,使用 data- 是不是合适,不能一概而论。

常见的误用 data-* 的情况:

  1. 在HTML中已有更适合的特定属性。比如语义细化应该用class,而不是data-*;已经有title属性,不需要用data-tooltip。

  2. data-是特定于网站/应用的,如果是要作为通用协议的(比如提供给第三方),不应该用data-,而应该考虑microdata、rdfa或microformats。

  3. 库用 data-* 应该加入 namespace 以避免冲突。这一点许多库(比如bootstrap)做得不好。

前端MV框架通常并不需要你手动用data-,因为DOM和数据的关联是由框架管理的,但是框架可能内部使用data-作为实现手段。而你用MV框架的同时又使用bootstrap,那么bootstrap中component所需的data-你还是得写,因为那些data-是bootstrap的私有属性,跟MV*没有关系。


赞成 lvming6816077


http://www.zhihu.com/question/26532621


我有时候也会这么干,Bootstrap也有这么干过。这样只能存放文本格式的数据。

jQuery提供了data()函数来处理这种事,兴许更合适。它自己实现了某种缓存机制,可以直接存放对象。

【热门文章】
【热门文章】