数据。在 jQuery 的世界里,它指的是直接附加到元素上的信息片段(而不是,比如说,只负责自身的一个变量)。有很多方法可以在“客户端”(在浏览器中,而不是服务器)保存数据片段。可以使用任何类型的变量、cookie、localStorage、indexDB,以及其他各种方法。当数据与特定元素特别相关时,就会使用数据。
像许多 jQuery 方法一样,它既有设置器(两个参数)
$("#thing").data("name", "value");
也有获取器(一个参数)
$("#thing").data("name");
// "value"
你可以在任何 jQuery 对象上使用它。如果该对象中有多个元素,当你将其用作设置器时,所有元素都会获得该数据值。如果当你将其用作获取器时,该对象中有多个元素,它将使用第一个元素。
可以将数据视为元素的一种命名空间。许多元素可以使用相同的数据“名称”,但具有不同的值。
在 CSS-Tricks 的一个旧演示中有一个真实的用例,即Google Maps 滑块。在该演示中,有一个位置列表和一个嵌入式 Google 地图。当你在位置上悬停时,地图会移动到该位置的中心。为了做到这一点,地图 API 需要坐标。将这些数据放在这些位置的 HTML 中是有意义的,但我们不需要看到它。这是 HTML 中data-*
属性(HTML5 中新增)的完美用例。然后,该位置列表中的列表项可能如下所示
<li data-geo-lat="41.9786" data-geo-long="-87.9047">
<h3>O'Hare Airport</h3>
<p>Flights n' stuff</p>
<p class="longdesc"><strong>About:</strong> Info about location...</p>
</li>
data-*
只是表示data-任何内容
的一种方式。你可以随意创建数据属性。任何你想要的。在本例中,我们为纬度创建了一个,为经度创建了另一个。当鼠标悬停事件在该列表项上触发时,我们只需使用 jQuery 的 .data()
获取器来获取信息并将其与 API 一起使用。
因此,我们现在已经从两个方面了解了数据,即从 JavaScript 本身设置和获取的数据,以及在 HTML 中开始并由 JavaScript 使用的数据。两者都可以,API 也是相同的。你可能会认为使用 .data()
作为 data-* 属性中信息的获取器很奇怪。它确实有点奇怪。通常,你像这样访问 HTML 中属性的信息
$("#thing").attr("rel"); // or any other attribute
如果你愿意,也可以这样使用它
$("#thing").attr("data-geo-lat");
.data()
获取器只是一个快捷方式。我有点喜欢它,因为它能让你保持正确的思维方式。
但是,需要注意的是,使用 .data()
作为设置器**不会实际更改 HTML 中的data-*
属性**。这是一个很好的默认设置,因为不更改 DOM 意味着速度更快。如果你绝对需要更改 HTML 中的属性,请使用 .attr()
方法作为设置器。还要注意,使用 .attr()
时,你需要包含“data-”前缀,而使用 .data()
时则不需要。
$("#thing").attr("data-name", "Chris");
你可能需要这样做,以便确保应用程序的其他部分可以访问它,或者如果你正在执行类似的操作,例如针对它们编写 CSS 选择器(例如 [data-something="whatever"] { }
)