zoukankan      html  css  js  c++  java
  • HTML自定义标签与标签自定义属性

    大部分浏览器支持自定义HTML标签和为标准标签自定义属性,而且很多浏览器对这两种自定义行为的支持都很直接了当。

    自定义HTML标签

    在firefox、chrome这种现代浏览器里,自定义标签很简单,就像标准的标签那样写就可以了,而且CSS和JavaScript存取自定义标签和标准标签并无二致。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <foo id="idFoo" style="color:red" data-bar="bar">foo tag!</foo>
    <script>
        (function(){
            console.log($("foo").text()); //foo tag!
            console.log($("foo").data("bar")); //bar
            console.log(document.getElementById("idFoo").innerHTML); //foo tag!
            console.log(document.getElementById("idFoo").getAttribute("data-bar")); //bar
        })();
    </script>

    firefox 21,chrome 27,IE 10表现都十分正常。IE9没有测试,据说也没问题

    不过据说在IE8及之前,自定义标签没那么简单,可以通过添加命名空间或者是document.createElement(“自定义标签名称”)来进行自定义HTML标签,不过如果你想在自定义的标签上使用CSS选择器,则必须使用document.createElement(“自定义标签名称”),不管有没有定义过XML命名空间。参见这里

    还有人报告一个IE8自定义标签的问题,”事先已document.createElement(‘thetag’),但后续通过innerHTML的方式添加的该元素,IE8是不认的,createElement + appendChild 则可以“。

    新的项目已经决定只支持Firefox,Chrome,IE9+版本,IE6,7,8之类的随它去吧。

    标签自定义属性

    自定义标签属性经常会用到,但是一直是没有规范来约束如何自定义标签属性,导致一些混乱和移植性问题。现在HTML5增加了一个自定义data属性的特性。

    很简单,只要自定义属性以data-开头,后面至少跟随一个字符即可,但是不能包含字符U+0041到U+005A (LATIN CAPITAL LETTER A to LATIN CAPITAL LETTER Z)。每个元素可包含多个自定义属性。

    这些data-属性在页面上是不显示的,不会影响页面布局和风格,但它却是可读可写的。

    jQuery已经支持通过data方法来读取自定义的data-属性,而且支持json格式的属性值,很方便。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <foo id="idFoo" style="color:red" data-bar="bar" data-obj='{"key1":"value1"}' >foo tag!</foo>
    <script>
        (function(){
            console.log($("foo").text()); //foo tag!
            console.log($("foo").data("bar")); //bar
            console.log($("foo").data("obj").key1); //value1
            console.log(document.getElementById("idFoo").innerHTML); //foo tag!
            console.log(document.getElementById("idFoo").innerText); //foo tag!注:firefox 21不支持
            console.log(document.getElementById("idFoo").getAttribute("data-bar")); //bar
        })();
    </script>

    上面的代码中,在自定义属性中使用json数据需要注意,一定要在外层使用单引号’,内层使用双引号”,如果反过来,firefox和chrome都会报undefined。

    自定义标签的innerText属性,firefox 21不支持,输出”undefined”,chrome 27和IE 10输出正常。

    也可以通过data(key,value)方式为自定义data属性赋值。

    自定义data属性代码在friefox 21,chrome 27,IE 10测试通过。

    UPDATE(05/21/2014):
    The data- attributes are pulled in the first time the data property is accessed and then are no longer accessed or mutated (all data values are then stored internally in jQuery).

    data-特性(attributes)只在第一次读取时获取其值,并且将其缓存到jQuery内部,之后不再读取或改变data-特性。也就是说第一次读取之后,如果通过.attr()方法修改了特性的值,然后再通过data方法读取时仍然是原来的值。

    References:
    [1]HTML 5 的data-× 自定义属性和 jQuery的data()方法

  • 相关阅读:
    array_map()与array_shift()搭配使用 PK array_column()函数
    Educational Codeforces Round 8 D. Magic Numbers
    hdu 1171 Big Event in HDU
    hdu 2844 poj 1742 Coins
    hdu 3591 The trouble of Xiaoqian
    hdu 2079 选课时间
    hdu 2191 珍惜现在,感恩生活 多重背包入门题
    hdu 5429 Geometric Progression 高精度浮点数(java版本)
    【BZOJ】1002: [FJOI2007]轮状病毒 递推+高精度
    hdu::1002 A + B Problem II
  • 原文地址:https://www.cnblogs.com/mxxhit/p/4071105.html
Copyright © 2011-2022 走看看