在JS中使用dataset获取自定义属性注意事项

在JS中获取自定义属性的注意事项

参考链接

HTML5 中添加了 data-* 的方式来自定义属性,实际上就是在自定义属性名前加上前缀data- 即可,使用这样的结构可以进行数据存放。使用data-* 可以解决自定义属性混乱无管理的现状。

一个自定义一旦加上了前缀 data- ,那么在 JS 中就可以通过 elementNodeObject.dataset拿到这个属性,显然 dataset 是 attribute 集合的一个子集。
dataset 属性的值是 DOMStringMap的一个实例,也就是一个名值对儿的映射。在这个映射中,每个 data-name 形式的属性都会有一个对应的属性,只不过没有 data- 前缀。但是前缀之后的类名字符串也还是有蹊跷的……

使用 dataset 获得自定义属性值注意事项

  1. 直接使用 .操作符即可,但是.后面的自定义属性名称不需要再加上 data- 前缀;

  2. 若你在 元素结点 中的自定义属性使用驼峰式命名,你会惊奇的发现:无法直接在 dataset 中 通过驼峰式命名格式来获得自定义属性的值!而必须使用全部小写形式。

    <body>
        <div id="main" data-customizedAttr="hahaha"></div>
        <script>
            var main = document.getElementById('main');
            console.log(main.dataset.customizedAttr); 
            console.log( main.getAttribute("data-customizedAttr") );
        </script>
    </body>
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RiWR9E0g-1592617019519)(自定义属性注意事项.assets/image-20200620092941659.png)]

    通过修改为全部小写形式即可:

    console.log(main.dataset.customizedattr); 
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jytrAgu2-1592617019522)(自定义属性注意事项.assets/image-20200620093057333.png)]

    这一点直接输出 main.dataset 就可以看出来:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UYPyjOL6-1592617019524)(自定义属性注意事项.assets/image-20200620093156560.png)]

  3. 若你在 元素结点中通过 - 来分隔单词,在 dataset 中去掉 data- 前缀,就可以通过驼峰式命名来获得自定义属性值。

    <body>
        <div id="main" data-customized-attr="hahaha"></div>
        <script>
            var main = document.getElementById('main');
            console.log(main.dataset.customizedAttr);
            console.log( main.getAttribute("data-customized-attr") );
        </script>
    </body>
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qq9L0KfW-1592617019526)(自定义属性注意事项.assets/image-20200620093432121.png)]

    直接打印 dataset :

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tXUzyjlp-1592617019528)(自定义属性注意事项.assets/image-20200620093534805.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值