Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何更新;复杂的;使用jQuery'存储的数据;s.data()?_Javascript_Jquery - Fatal编程技术网

Javascript 如何更新;复杂的;使用jQuery'存储的数据;s.data()?

Javascript 如何更新;复杂的;使用jQuery'存储的数据;s.data()?,javascript,jquery,Javascript,Jquery,在我看来,jQuery的.data()函数更像是一次写入存储,而不是真正的读写存储 似乎没有一种舒适的方式来更新复杂的值 让我们假设一个人想要在一个双链接列表中使用一些元素(不是我的用例,只是为了说明) 如果我能做到以下几点,那就很容易了: $elem.data('prev', $prev); $elem.data('next', $next); 但是我觉得污染元素的“global”.data()名称空间是一种不好的做法 因此,我宁愿: $elem.data('list', {prev: $p

在我看来,jQuery的
.data()
函数更像是一次写入存储,而不是真正的读写存储

似乎没有一种舒适的方式来更新复杂的值

让我们假设一个人想要在一个双链接列表中使用一些元素(不是我的用例,只是为了说明)

如果我能做到以下几点,那就很容易了:

$elem.data('prev', $prev);
$elem.data('next', $next);
但是我觉得污染元素的“global”
.data()
名称空间是一种不好的做法

因此,我宁愿:

$elem.data('list', {prev: $prev, next: $next});
但是现在如何更新
prev

在第一个示例中,我只需执行以下操作:

$elem.data('prev', $newPrev);
但在我看来,“更好”的做事方式我唯一能想到的是这样的事情:

$elem.data('list', {prev: $newPrev, next: $elem.data('list').next});
这对我来说似乎要麻烦得多,我怀疑有更好的方法,但到目前为止我什么也找不到


我应该怎么做呢?

当您用一个参数调用jQuery的数据方法时,您会得到一个对存储对象的引用,您可以使用常规的
表示法直接更新该对象:

$elem.data('list').prev = $newPrev;
感谢@balpha

这样说:

// method one
var elemData = $elem.data("list");
elemData.prev = "foo";

// method two
$elem.data("list").next = "bar";

如果您有FireBug,您可以检查演示和(输出记录在控制台中)

使用数据('next',..)数据('prev',..)有什么问题?它是每个元素,而不是全局。第三行是unnecessary@balpha:谢谢!更新了我的答案。