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); } );
本来区别不是很大的,都是添加属性的,比如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方法
按道理我那个是个mousemove事件他移动的话会不断执行下面的hs.show(400).delay(1200).fadeOut();
可为什么只是做个判断,设置个属性为true,这个hs.show(400).delay(1200).fadeOut()就可以只会执行一次而不会随着不断移动的move事件??
@小鬼文: http://api.jquery.com/on/
你的on方法注册事件,语法好像不对
@ThreeTree: 这种写法是可以的
@骑着蜗牛耍流氓: 嗯,以前还真没注意到这一点
@小鬼文: 执行一次很好理解的,第一次执行mousemove就把if中的条件给变成false了,所以以后就进不了if条件里了,除非你触发一次mouseout事件
还是得不到好的答案!!!