javascript - .data() 在哪里存储值?

标签 javascript jquery performance

<分区>

Possible Duplicate:
How does jQuery .data() work?

在 jQuery 中,.data 读取 HTML5 data-* 属性的值,但是当您使用 data 函数设置/更新值时, 它不会改变属性。

​<div id="first" data-foo="attr value" >​​​​​​​​​​​​​​​​​​​​​​​​​​​  </div>

var attr = $('#first').data('foo');
alert(attr); // alerts: attr value

$('#first').data('foo', 'data value');
var data = $('#first').data('foo');
alert(data); //alerts: data value

var attrAgain = $('#first').attr('data-foo');
alert(attrAgain);​ // alerts: attr value

jsFiddle

jQuery 在哪里存储值?在文档中写道:

The data- attributes are pulled in the first time the data property is accessed and then are no longer accessed or mutated (all data values are then stored internally in jQuery).

但是在哪里呢?我想了解使用 .data 函数的开销有多大。
如何在没有 .data 函数的情况下获得这些值?

最佳答案

jQuery 有一个内部存储空间——您无法立即访问它。如果您需要更新数据属性,请查看 Making jQuery.data() selector aware .

jQuery 使用内部存储(只是一个 javascript 对象,顺便说一句。)有两个原因:

  1. 避免每次调用 .data() 时访问 DOM
  2. 数据属性可能只包含字符串/整数,所以 .data('foo', {bar:"baz"}) 不会像您期望的那样工作

jQuery 根据 data module of jQuery 1.7.1 将这些背景信息存储在 jQuery.cache 中.

关于javascript - .data() 在哪里存储值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9554816/

相关文章:

javascript - React i18next 和更改语言的正确方法

javascript - 使用数字和字符串创建新的 Array() 构造函数

jquery - 如何使用 jQuery 在单击输入框时使其他 div 变暗?

javascript - 检测后退按钮触发器(使用 Ajaxify 和 History.js)

WPF 文本 block 性能不佳

javascript - node.js - 从大型 XML 文件中提取 XML 片段

javascript - Firefox 上不会调用 HTML5 视频的 canplay/canplaythrough 事件。为什么?

javascript - jQuery 确认按钮不在弹出的确认()对话框中

Python 更快地打印 sympy 矩阵

java - 需要打印调用时使用的函数的实际参数名称