jQuery的.data()添加的数据在HTML上面看不见的吗?

html结构如下:

<div></div>

JS如下:

$("div").data("blah", "hello");  // blah设置为hello

那么这个blah的“hello”的值我在那个DIV里面是不是看不到?如果看不到,那在开发的时候怎么记得这东西?

阅读 9.6k
6 个回答
  1. 这个“hello”的值并没有存在对应的那个div上,而是存在jQuery.cache这个对象上,所以你当然看不见。
    $().data()方法设置数据的时候用一个唯一自增的id将jQuery.cache跟DOM对象关联起来。
    详细请参考:http://www.cnblogs.com/snandy/archive/2011/06/10/2077298.html
  2. 没太明白po主这个问题的意思。。。是记不住“hello”这个值还是记不住“blah”这个key啊?自己设置的怎么会不记得呢?

确实看不见的。
至于如何修改和获取,获取$ele.data('key')和设置$ele.data('key','value')
为何建议使用data而不用在html上进行属性设置,我也不知道啊。求具体解答。
data上倒是通常可以用来存放对象,这个在jquery面向对象的插件写法上很常见哦。

如果题主希望记住的话,直接存在该 div 的自定义属性 blah 里面即可:

  $("div").attr('blah', $("div").data("blah"));

效果如下:

请输入图片描述

再取值的话就可以直接读 div 的属性值:

$("div").attr('blah')

实际上,一般直接读 $("div").data("blah") 的值即可,如果题主一定需要存在 DOM 内,就按照上述写法吧,个人感觉有些 hard code,而且兼容性也需验证

data存放的数据的生命周期是多久啊

html标签里的data-只是给data赋初值,证据是用data方法改变数据后再拿attr('data-')改变不起效果

jQuery在某个版本里,.data(key, value)中value可以存储任意对象而不限于简单类型。
为此付出的代价是,把dom用一个(印象中)叫jQuery-ID的东西进行唯一标识,然后用jQuery.cache做k-v字典,于是dom上只能看到jQuery-ID,而实际上data数据都是存在那个字典里的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题