首页 新闻 会员 周边

关于 jQuery 的 attr 方法

0
悬赏园豆:10 [已解决问题] 解决于 2010-03-13 23:00

今天在使用 attr 为一个对象设置一个属性时出现这样一个问题:

 

var obj = {name:'', sex:''};

var $newNode = $('<span>contents....</span').attr('_udata', obj);

$(document.body).append($newNode);

 

上面的代码使用了 attr 方法为对象设置了一个属性,这个属性的值是一个 Object,但是在使用 attr 方法来获取这个属性值的时候,获取的值却变成了字符串:

 

var obj = $newNode.attr('_udata');

alert(typeof obj); // alert string.

 

真是很奇怪了,我使用是的 v1.3.2 版本的。

 

不知道大家有没有遇到这样的问题

匡匡的主页 匡匡 | 初学一级 | 园豆:51
提问于:2010-03-09 14:32
< >
分享
最佳答案
1

用1.4.2这个版本吧,提供一个新的方法,$.fn.data(name[,val])

收获园豆:5
疯子也爱美 | 菜鸟二级 |园豆:230 | 2010-03-09 16:02
其他回答(3)
0

这个应该不奇怪吧!这里你使用attr进行属性添加的时候她是作为字符串的形式添加到该属性上的,取出来也一样。想要转换回原来的object对象你可以使用eval来处理。比如 var obj=eval($newNode.attr('_udata'));

西越泽 | 园豆:10775 (专家六级) | 2010-03-09 14:45
$newNode.attr('_udata') 方法取出来的数据是个 '[object Object]' 的字符串。 按 jQuery 的 API 参考, attr 设置属性的时候,值是一个 Object, 而取值的时候,返回的也是一个 Object
支持(0) 反对(0) 匡匡 | 园豆:51 (初学一级) | 2010-03-09 15:27
@匡匡:司徒正美做了说明,其实我也说了,attr只能是作为字符串的形式添加属性的。
支持(0) 反对(0) 西越泽 | 园豆:10775 (专家六级) | 2010-03-09 18:13
0

对不起,DOM元素的属性只能是字符串!你赋什么进去也好,里面都会强制调用它的toString方法。DOM元素是不同于javascript对象的。如果你一定要给_udata绑定一个对象,那就用data方法吧。

收获园豆:3
司徒正美 | 园豆:270 (菜鸟二级) | 2010-03-09 16:06
0

你用错方法了,应该用数据缓存那里的data方法;attr是给html元素设置属性的,不是在jquery对象上缓存数据。

收获园豆:2
Inside Zhou | 园豆:212 (菜鸟二级) | 2010-03-09 16:21
有些地方又可以,有些地方又不行,很奇怪,我在找找原因
支持(0) 反对(0) 匡匡 | 园豆:51 (初学一级) | 2010-03-09 16:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册