我有一些数据需要与特定元素相关联,例如单个表格行。此数据包含诸如当前状态之类的信息以及与SQL行相关的唯一标识符。当用户与我想要读出唯一标识符的元素进行交互时,使用该标识符发出一个AJAX请求,让用户更改该元素的状态。
经过研究,似乎有两个阵营如何嵌入这个元素特定的信息。
1)在html5中使用数据属性。我的理解是,这将适用于现代Web浏览器以及不支持html5的旧版浏览器。但是虽然这有效,但它不遵循HMTL规范(小于HTML5),因此如果您通过HTML语法检查器运行它,它将无法验证。
2)将附加数据存储到javascript数组,对象等中。现在需要一种方法将javascript数据关联到html元素。
使用这两种不同的方法存储数据有哪些优缺点?你会推荐什么方法?
谢谢!
答案 0 :(得分:4)
我不担心数据属性没有通过验证器。该属性在HTML5中,因为人们长时间使用类似的,非标准化的属性来专门解决这个问题。继续开始编写“HTML5”,使用规范的部分工作,即不要在某个浏览器中断,并使用HTML5 doctype。 W3C验证器至少已经支持doctype。
至于使用哪种方法,我认为它实际上归结为何时要解析JavaScript解释器中的信息:页面加载或需要数据时。我想这取决于你有多少信息,哪些信息最有效。但是,使用一两个数据属性将其添加到HTML中不会出错。
就个人而言,我喜欢使用数据属性将信息添加到HTML中。在您描述的场景中,我会使用data-state
和data-rid
(或类似的),这样我就不必进一步解析信息了(听起来您正考虑将两位信息放入其中)一个数据属性)。这样,您的信息表就真正完整了:数据呈现给用户,标记包含解析器可能需要的更多信息。
答案 1 :(得分:1)
我肯定会使用选项(1)并且不要担心那些未验证的属性或只是将您的文档验证为html5。这很简单。它有效。
引起某些人选择(2)的“关注点分离”理论对于这种情况是没有意义的,因为如果你将数据放入某种JS对象中,你仍然需要一种方法将它绑定到实际的html元素因此不仅两者不是真正分开的,它们比它们在客户端需要的更复杂,而且首先生成它所需的服务器端代码更复杂。
答案 2 :(得分:1)
在选项(2)中,不需要特别关联,而不需要选项(1) - 更少。您可以将数据放入与该元素对应的DOM对象的属性中。为什么不利用JavaScript的基本功能来为对象添加属性呢?
答案 3 :(得分:1)
你用jQuery标记了你的问题,所以我假设你拥有它。您可以使用.data()
方法存储任意数据并将其与元素相关联。
$("tr").first().data('sqlId', 1234);
assert($("tr").first().data('sqlId') === 1234);