作者kilva (嗡嗡)
看板Ajax
标题[问题] 请问引数为函式的$.data用法
时间Fri Aug 31 08:19:14 2012
最近在看jQuery的原始码,$.data()函式看起来应该可以接受字串、物件及
函式三种引数才是。
引数为字串的用法很简单,就单纯储存和读取而已。
$("div").data("x",3)在所有的<div>元素上储存x=3这个变数。
(其实是储存在$.cache[id]上,id值才储存在元素的$.expando属性上)
引数为物件的用法也差不多:
var a = {x:1, y:2, z:function(){}}
$("div").data(a)在所有的<div>元素上储存a内的所有元素。
效果和$("div").data("x",1).data("y",2).data("z",function(){})一样。
最後,请问引数为函式的用法为何?
感谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.44.169.165
1F:→ ousapas:引数好像不能只有一个function 08/31 08:41
3F:→ ousapas:218行 key只有处理object和string的情况 08/31 08:43
4F:推 Fantasywind:不能单传f source里面type obj全部当作物件处理 08/31 08:55
5F:→ KawasumiMai:呼叫之後的回传值? 08/31 09:58
再试验的结果,只有$.data()函式的引数可以用函式,$.fn.data()会出现错
误讯号。
而且用法似乎和物件差不多。
var a = function(){}; a.x = 3; a.y = 4; a.z = 5;
$.data($("div")[0],a)会在第一个<div>元素上储存a的静态变数。
效果和$($("div")[0]).data("x",3).data("y",4).data("z",5)一样。
另外,在ousapas提供的网址中的第249行中,将
「if ( typeof key === "object" ) {」改成
「if ( typeof key === "object" || typeof key === "function" ) {」
$("div").data(a)就可以使用了。
效果和$("div").data("x",3).data("y",4).data("z",5)一样。
不知道为什麽原始码中没有这样写?
※ 编辑: kilva 来自: 114.44.169.165 (08/31 10:22)
6F:→ ousapas:很少人这样用吧 大都是key,value的形式 08/31 10:41
※ 编辑: kilva 来自: 114.44.169.165 (08/31 12:03)