zoukankan      html  css  js  c++  java
  • HTML5 的data-* 自定义属性

    HTML5增加了一项新功能是自定义数据属性,也就是 data-*自定义属性。

    在HTML5中我们可以使用以data-为前缀来设置我们需要的自定义属性,来进行一些数据的存放。

    当然高级浏览器下可通过脚本进行定义和数据存取。在项目实践中非常有用。例如:

    <div id="user" data-uid="12345" data-uname="愚人码头"></div>

    使用attribute方法存取data-*自定义属性的值

    使用attributes方法存取data-*自定义属性的值非常方便:

    // 使用getAttribute获取 data- 属性
    var user = document.getElementById('user');
    var userName = user.getAttribute('data-uname'); // userName = '愚人码头'
    var userId = user.getAttribute('data-uid'); // userId = '12345'
    
    // 使用setAttribute设置 data- 属性
    user.setAttribute('data-site', 'http://www.baidu.com');

    此方法能在所有的现代浏览器中正常工作,但它不是HTML5的自定义 data-* 属性被使用目的,不然和我们以前使用的自定义属性就没有什么区别了。

    这种“原始”的自定义属性和上面data-*自定义属性没什么区别,知识属性名不一样。

    dataset属性存取data-*自定义属性的值

    这种方式通过访问一个元素的dataset属性来存取data-*自定义属性的值。这个dataset属性是HTML5 JavaScript API的一部分,用来返回一个所有选择元素data-属性的DOMStringMap对象。

    和attributes方法比较:

    data-*主要是对自定义属性做了标准化;循环取值的时候dataset属性比较方便,还有不是问题的问题就是自定义的attribute也不符合html规范。

    使用这种方法时,不是使用完整的属性名,如data-uid来存取数据,应该去掉data-前缀。

    还有一点特别注意的是:data-属性名如果包含了连字符,例如:data-date-of-birth,连字符将被去掉,并转换为驼峰式的命名,前面的属性名转换后应该是:dateOfBirth。

    <div id="user" data-id="1234567890" data-name="愚人码头" data-date-of-birth>码头</div>
    var el = document.querySelector('#user');
    console.log(el.id); // 'user'
    console.log(el.dataset);//一个DOMStringMap
    console.log(el.dataset.id); // '1234567890'
    console.log(el.dataset.name); // '愚人码头'
    console.log(el.dataset.dateOfBirth); // ''
    el.dataset.dateOfBirth = '1985-01-05'; // 设置data-date-of-birth的值.
    console.log('someDataAttr' in el.dataset);//false
    el.dataset.someDataAttr = 'mydata';
    console.log('someDataAttr' in el.dataset);//true

    如果你想删掉一个data-属性,可以这么做: delete el.dataset.id; 或者 el.dataset.id=null; 。

    看起来很美,哈哈,但是不幸的是,新的dataset属性只有在Chrome 8+ Firefox(Gecko) 6.0+ Internet Explorer 11+ Opera 11.10+ Safari 6+浏览器中实现,所以在此期间最好用的getAttribute和setAttribute来操作。

    关于data-属性选择器

    在实际开发时,您可能会发现它很有用,你可以根据自定义的data-属性选择相关的元素。例如使用querySelectorAll选择元素:

    // 选择所有包含 'data-flowering' 属性的元素
    document.querySelectorAll('[data-flowering]');
    
    // 选择所有包含 'data-text-colour' 属性值为red的元素
    document.querySelectorAll('[data-text-colour="red"]');

    同样的我们也可以通过data-属性值对相应的元素设置CSS样式,例如下面这个例子:

    <style type="text/css">
    .user {width: 256px;height: 200px;}
    .user[data-name='feiwen'] {color: brown}
    .user[data-name='css'] {color: red}
    </style>
    
    <div class="user" data-id="123" data-name="feiwen">1</div>
    <div class="user" data-id="124" data-name="css">码头</div>
  • 相关阅读:
    HDU 1075 What Are You Talking About(字典树)
    HDU 1075 What Are You Talking About (stl之map映射)
    HDU 1247 Hat’s Words(字典树活用)
    字典树HihoCoder
    HDU 1277全文检索(字典树)
    HDU 3294 Girls' research(manachar模板题)
    HDU 3294 Girls' research(manachar模板题)
    HDU 4763 Theme Section(KMP灵活应用)
    Ordering Tasks UVA
    Abbott's Revenge UVA
  • 原文地址:https://www.cnblogs.com/kandyvip/p/4800219.html
Copyright © 2011-2022 走看看