• HTML5 data-* 自定义属性


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

    读写格式

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title></title>
        </head>
        <body>
            <div id="dsh" data-age="20">
                Hello Word!
            </div>
            <script>
                var dsh=document.getElementById("dsh");
                console.log(dsh.dataset.age)//读取是通过dataset对象,使用”.”来获取属性【读取】
                dsh.dataset.name="Mr.D";//设置了自定义属性,也是通过dataset对象【设置】
                //注意到没,我们在添加或读取属性的时候需要去掉前缀data-*
            </script>
        </body>
    </html>

    追加样式

    利用属性追加样式,当然不带data的自定义属性也可以这样做,想id,class等

    与Attribute

    与有些同学可能会问这和getAttribute/setAttribute除了命名有什么区别吗,我们来看一下

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title></title>
        </head>
        <body>
            <div id="dsh" data-age="20">
                Hello Word!
            </div>
            <script>
                var dsh=document.getElementById("dsh");
                //获取
                console.log(dsh.dataset.age)
                console.log(dsh.getAttribute("data-age"))
                
                //设置
                dsh.dataset.name="Mr.D";
                dsh.setAttribute("data-sex","boy")
            </script>
        </body>
    </html>

    哈哈,看出来没?

    两者都把属性设置到了attribute上(废话,要不人家能叫自定义属性)。

    也就是说getAttribute/setAttribute可以操作所有的dataset内容,但是dataset内只有操作带有data-前缀的属性(若是age=20,则它就管不了啦)。

    so,由此推论dataset内容只是attribute的一个子集,特殊就特殊在命名上了。

    后话

    那么为什么我们还要用data-*呢,一个最大的好处是我们可以把所有自定义属性在dataset对象中统一管理,遍历啊神马的都哦很方便,而不至于零零散散了,所以用用还是不错的。

    比较不好的消息就是data-*的浏览器兼容性情况十分不乐观
    IE11+
    Chrome 8+
    Firefox 6.0+
    Opera 11.10+
    Safari 6+
    其中IE11+简直就是亮瞎小伙伴的眼,看来要想全面使用此属性路漫漫其修远矣

    补充JQ操作

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8"/>
        <script type="text/javascript" src="jquery-2.1.4.min.js"></script>
    </head>
    <body>
      <ul class="tab">
          <li data-name="a">主页</li>
          <li data-name="b">音乐</li>
          <li data-name="c">个人</li>
      </ul>
      <script type="text/javascript">
                  /*读取*/
                  console.log($("li:eq(0)").data("name"))
                  
                  /*写入*/
                  $("li:eq(1)").data("name","bb")
                  console.log($("li:eq(1)").data("name"))
                  
      </script>
     </body>
    </html>

     

    参考:http://www.w3school.com.cn/jquery/data_jquery_data.asp

  • 相关阅读:
    uva624 CD (01背包+路径的输出)
    算法:全排列
    Android使用Intent实现拨打电话的动作
    Java并发编程从入门到精通 张振华.Jack --我的书
    《算法导论》— Chapter 12 二叉查找树
    Java中arraylist和linkedlist源代码分析与性能比較
    Cg入门14:Vertex Shader
    Nucleus PLUS的启动、执行线程和中断处理
    Unity Shaders and Effects Cookbook (3-5) 金属软高光
    EasyDarwin开发出相似于美拍、秒拍的短视频拍摄SDK:EasyVideoRecorder
  • 原文地址:https://www.cnblogs.com/dshvv/p/5367513.html
Copyright © 2020-2023  润新知