自定义属性

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

设置方式

data-*有两种设置方式:
1.可以直接在HTML元素标签上书写

   <div id="test" data-age="24">
       Click Here
   </div>

其中的data-age就是一种自定义属性,当然我们也可以通过JavaScript来对其进行操作,HTML5中元素都会有一个dataset的属性,这是一个DOMStringMap类型的键值对集合。

2.通过js设置

    var test = document.getElementById('test')
    test.dataset.my = 'Byron'
    // 这样就为div添加了一个data-my的自定义属性。

使用JavaScript操作dataset有两个需要注意的地方:
a.在添加或读取属性的时候需要去掉前缀data-*,像上面的例子没有使用test.dataset.data-my = 'Byron';的形式
b.如果属性名称中还包含连字符(-),需要转成驼峰命名方式,但如果在CSS中使用选择器,需要使用连字符格式

 // js中
test.dataset.birthDate = '19890615' // 在dom显示的为  data-birth-date
     
// css中  
<style type="text/css">
   [data-birth-date]  {
      background-color: #0f0;
      width:100px;
      margin:20px;
    }
</style>

读取的时候也是通过dataset对象,使用”.”来获取属性,同样需要去掉data-前缀,连字符需要转化为驼峰命名

  var test = document.getElementById('test');
        test.dataset.my = 'Byron';
        test.dataset.birthDate = '19890615';
        test.onclick = function () {
            alert(this.dataset.my + ' ' + this.dataset.age+' '+this.dataset.birthDate);
    }

data-*和getAttribute()和setAttribute()区别

var test = document.getElementById('test');
    test.dataset.birthDate = '19890615';
    test.setAttribute('age', 25);
    test.setAttribute('data-sex', 'male');
    
    
    console.log(test.getAttribute('data-birth-date')); // 19890516
    console.log(test.dataset.birthDate); // 19890516
    console.log(test.getAttribute('age')); //24
    console.log(test.dataset.age); //undefined
    console.log(test.dataset.sex); //male
    
    可以看出  通过dataset设置的属性可以通过getAttribute(但是要加data- 而且要用链接-)和test.dataset.birthDate获取

    通过setAttribute设置的属性  如果是直接设置没有加data-的属性,可以通过getAttribute(属性)获取
    
    通过setAttribute设置的属性  如果是设置加data-的属性,可以通过getAttribute(data-属性)获取
    
    可以通过getAttribute()和setAttribute()设置和获取标签属性,通过removeAttribute()移除标签的属性

    getAttribute 获取标签属性 (所有的标签属性都可以获取)

下面就详细介绍四种方法获取data-*属性的值
    
    <li id="getId" data-id="122" data-vice-id="11">获取id</li> 需要获取的就是data-id 和 dtat-vice-id的值

一:getAttribute()方法

    const getId = document.getElementById('getId');
      // //getAttribute()取值属性
    console.log(getId.getAttribute("data-id")); // 122
    console.log(getId.getAttribute("data-vice-id")); // 11

    // //setAttribute()赋值属性
    getId.setAttribute("data-id","48");
    console.log(getId.getAttribute("data-id"));//48
二:dataset()方法
    
      //data-前缀属性可以在JS中通过dataset取值,更加方便
      console.log(getId.dataset.id);//112
      //data-vice-id连接取值使用驼峰命名法取值 
     console.log(getId.dataset.viceId);//11

      //赋值
      getId.dataset.id = "113";//113
      getId.dataset.viceId--;//10

      //新增data属性
      getId.dataset.id2 = "100";//100

      //删除,设置成null,或者delete
      getId.dataset.id2 = null;//null
      delete getId.dataset.id2;//undefind

三:jquery data()方法

    var id = $("#getId").data("id"); //122
    var viceId = $("#getId").data("vice-id"); //11
    //赋值
    $("#getId").data("id","100");//100

四:jquery attr()方法

    var id = $("#getId").attr("data-id"); //122
    var viceId = $("#getId").attr("data-vice-id"); //11
    //赋值
    $("#getId").attr("data-id","100");//100

另外:jquery中的data和attr不要混用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容