首页 新闻 会员 周边

关于jquery data的用法

0
悬赏园豆:20 [已解决问题] 解决于 2015-01-04 14:59

1、$.data() 和attr有些相似,有谁可以简单明了的解释下$.data()吗?

2、还有就是下面的用法,有些不太理解!!

var hs=$("<div></div>");
$("body").append(hs);

$(".ws").on({

 "mousemove":function(ev){

if(!$(this).data('fadeOut')){//这个是不是检测这个对象是否有fadeOut对象(这里所有添加的都要是对象吗)
 $(this).data('fadeOut',true);//没有就添加一个对象
 hs.show(400).delay(1200).fadeOut();//那这里为什么hs可以用fadeOut呢,又不是添给他的,还是说在他这个域下的都能用?
 }
 },
 "mouseout":function(){
 hs.finish();
 $(this).data('fadeOut',false);
 }
 );
小鬼文的主页 小鬼文 | 初学一级 | 园豆:108
提问于:2015-01-02 12:37
< >
分享
最佳答案
0

本来区别不是很大的,都是添加属性的,比如name属性。

$.data("name", "abc"),这里的属性名其实是data-name,也就是会自动加上一个前缀data-

$.attr("name", "abc"),这里的属性名就是name

 

在jQuery中,还有一点区别很重要,就是存储数据的位置,data方法添加的属性会存放在内部的一个cache对象中。attr方法没有这种缓存机制,也就是存储在DOM节点上。

由上面的不同也导致,属性值的要求也不一样,attr()方法的属性值只能是字符串,data()方法的属性值是任意的

 

所以题目中的$(this).data('fadeOut',true);这里添加的是data-fadeOut属性,值为true。

hs.show(400).delay(1200).fadeOut();这里的fadeOut()方法是jQuery对象的方法。

 

注:我看hs只是一个字符串,而不是jQuery对象,不知道为什么可以调用jQuery方法

收获园豆:20
ThreeTree | 小虾三级 |园豆:1490 | 2015-01-02 13:59

按道理我那个是个mousemove事件他移动的话会不断执行下面的hs.show(400).delay(1200).fadeOut();

可为什么只是做个判断,设置个属性为true,这个hs.show(400).delay(1200).fadeOut()就可以只会执行一次而不会随着不断移动的move事件??

小鬼文 | 园豆:108 (初学一级) | 2015-01-02 15:43

@小鬼文: http://api.jquery.com/on/

你的on方法注册事件,语法好像不对

ThreeTree | 园豆:1490 (小虾三级) | 2015-01-04 10:12

@ThreeTree: 这种写法是可以的

骑着蜗牛耍流氓 | 园豆:135 (初学一级) | 2015-01-04 10:36

@骑着蜗牛耍流氓: 嗯,以前还真没注意到这一点

ThreeTree | 园豆:1490 (小虾三级) | 2015-01-04 13:35

@小鬼文: 执行一次很好理解的,第一次执行mousemove就把if中的条件给变成false了,所以以后就进不了if条件里了,除非你触发一次mouseout事件

ThreeTree | 园豆:1490 (小虾三级) | 2015-01-04 13:37
其他回答(1)
0

还是得不到好的答案!!!

小鬼文 | 园豆:108 (初学一级) | 2015-01-04 12:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册