【发布时间】:2017-08-08 20:16:24
【问题描述】:
在将我现有的一些项目从 jQuery 转换为纯 JS 时,我遇到了 jQuery 的 .data() 实用程序的一些问题。到目前为止,我还没有找到一种简单的 JS 方法,可以让我获取和检查 navGlobal 对象中的所有数据属性。
var navGlobal = document.querySelector('.nav-global');
if (navGlobal !== null &&
navGlobal.data() &&
navGlobal.data().account &&
navGlobal.data().account.accountData &&
navGlobal.data().account.accountData.address &&
navGlobal.data().account.accountData.address.zip) {
// do something
}
我的尝试:
最初,我想我会使用 .getAttribute() 和 .hasAttribute() 检查这些数据属性是否存在。但这只会增加混乱 - 我不确定我将如何使用 vanilla JS 深入到嵌套属性(即 navGlobal.data().account.accountData.address)。 链接 .getAttribute() 并没有真正起作用,因为这些数据属性中的大多数都附加到 navGlobal 的子元素,而不是 navGlobal 元素本身。
最好的方法是什么?
【问题讨论】:
-
我同意问题相似,但回答者给出的示例是人为的,也没有解决存在嵌套属性的场景。
-
在 SO 上搜索,您会发现更多相同的问题,看看它们是否适用。
-
您发现
$().data()不仅检索data-attributes,而且从不设置它。相反,它会构建一个字典并使用您调用的 jquery 元素data()来存储传递的值。这允许存储任何类型的值,而数据属性只能存储 DOMStrings(因此没有对象)。要自己实现它,您必须创建自己的地图。或者如果你很懒,你也可以简单地将这些值附加到一些任意的 DOMElement 自定义属性(例如elem._myOwn_data.account = {acccountData: { address: { zip: 'someVal' } } })。
标签: javascript jquery custom-data-attribute