0

以某种方式让 jquerydata()函数通过 ref 返回一个对象。

这是 javascript 中的一种方式来指向他自己的对象而不修改 ref 对象?

这是我对问题的演示:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script>
var  c= console.log ;
$(document).ready(function(e) {
    var _data   = $("#elem").data();
    var _xdata = _data ; // should be a miror object 
    console.log($("#elem").data() );
    _xdata.id = "changes applied back to #elem.data object !!!"  ;
    console.log($("#elem").data() );
    //any way to separate between $("#elem").data() and _xdata ??
}) ;
</script>
<div id="elem" data-id="1" data-foo="some data"></div> 
4

3 回答 3

2

这不是 jQuery 问题 - 它是 javascript 问题。当您将 _xdata 分配给 _data 时,您实际上是在将引用的值分配给 _data 对象(我知道这有点令人困惑)。如果你想创建一个“镜像对象”,你应该像这样克隆它:

var _xdata = jQuery.extend(true, {}, _data);

编辑:我在这里总是太慢,但如果你正在寻找一个浅拷贝,你可以选择:

var _xdata = jQuery.extend({}, _data);
于 2013-05-07T21:08:19.390 回答
0

您可以使用 jQuery 的 .clone() 方法来克隆对象(及其数据),而不是像现在这样创建引用。

var _xdata = $("#elem").clone(true).data();

这样您就可以在不影响原始数据的情况下操作克隆的数据。

于 2013-05-07T21:05:11.017 回答
0

另一件事是,数据中的值在页面加载时存储在内部缓存中。因此,当您编写$("#something").data("whatever")它时,它会从加载页面的时间返回值,而不管该特定时刻用 html 写入的数据是什么值。

于 2013-05-07T21:15:17.513 回答