简而言之,数据属性可以附加到由属性描述的元素,其中隐藏输入的区域不能位于另一个 DOM 元素内,并且它的使用仅限于表单(无论如何都是良好的做法)。隐藏的输入是一个实际的 DOM 元素,而 data 属性很好……是一个属性,所以它可以绑定到一个 DOM 元素。在大多数情况下,但如果您需要更多信息并且可能需要继续阅读示例,我警告您它有点长而且英语不是我的母语。
基本上,创建 data 属性是为了向 DOM 元素添加额外的信息,这些信息不能通过现有的属性(例如 class 或旧的 id)附加到它。
这主要影响基于 Web 的应用程序,或者更具体地说是 Saas,对数据驱动属性的需求比普通网站要广泛得多(即使背后有 CMS)。
很多年前我曾经梦想过这个属性,当时你只有两个选择:
- 将 html 属性用于我们
最初创建或设计的东西
- 使用带有标记的 html 属性,通过客户端或服务器端函数(split、splice、explode)对它们进行解码
这种方法的问题在于,无论您如何看待它,您都没有按照它们的意图和设计使用方式使用 html 属性。
Html 是一种标记语言,因此它自然不具有数据驱动属性,您无法使用这些属性来操纵数据处理和行为。
我当时的基本情况是我想要一个 jQuery 对话框来加载所有数据输入表单(客户、产品、供应商等),每个表单具有不同的宽度和高度。这样,客户端脚本会小得多,我需要为添加到客户端请求的应用程序的每个新表单添加一个新对话框。
这就是我在 data 属性出现之前的做法:
点击添加新产品
在 id 令牌中,我有 3 个值:
- 要从服务器加载的表单
- 对话窗口的宽度
- 对话窗口的高度
其他方法是使用 href 属性,但这比使用 id 更糟糕,因为 href 属性旨在指向 DOM 元素或其他源,而不是保存任何要处理的数据。
任何一种方法都涉及使用 split 或类似功能分解令牌。
这就是我现在使用出色的数据属性的方式:
点击添加新产品
这样我就不需要令牌,我可以用一个很好的旧 $(this).attr('data-form');, $(this).attr('data-dwith'); 获取每个属性的值 等等。
恕我直言,我认为向 html 元素添加一些额外的数据比创建更长的 javascript 文件更好,从而更重、更复杂。