+发表新主题
查看: 1704|回复: 0

[代码片段] JS 修改元素属性

[复制链接]

[代码片段] JS 修改元素属性

[复制链接]
GT雨燕 发表于 2016-1-14 19:58:09 浏览:  1704 回复:  0 [显示全部楼层] |只看大图 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
今天学习修改元素属性。

1. 元素属性:

    核心DOM:凡是来自于不带HTML开头的父类型中定义的属性和方法

    HTML DOM:凡是继承自HTML开头的父类型中定义的属性和方法

    body-->HTMLBodyElement//HTML DOM

        -->HTMLElement//HTML DOM

                    -->Element//核心DOM

                    -->Node//核心DOM


    比如:元素:-->HTMLXXXElement的原型

               -->HTMLElement的原型--->所有HTML元素的父类型

              ******以上是HTML DOM,以下是核心DOM*****

                              -->Element的原型--->所有元素的父类型

                -->Node的原型--->所有节点的父类型


    注意:一切从属性获取的值和设置到属性上的值必须都是字符串

            所以,计算时,都要先类型转换,再计算!


    获取元素的属性值:3种:

    1. var strValue=elem.getAttribute("属性名");

      使用场合:只找一个属性值时

    2. elem.attributes集合:包含了当前元素所有属性的节点对象

        var strValue=elem.attributes[i/"属性名"]-->返回一个属性节点对象

                         //属性集合  属性节点      

        elem.attributes[i/"属性名"].value-->属性值

      何时使用:遍历一个元素所有属性时使用

    3. elem.getAttributeNode("属性名")-->返回一个属性节点

         var strValue=elem.getAttributeNode("属性名").value-->返回属性值


    修改元素的属性值:2种:--------》所有属性值都是字符串

      1. elem.setAttribute("属性名","属性值");  //没有返回值

         何时使用:只设置一个属性值时

      2. elem.setAttributeNode(属性节点对象)

例如:

     

  1. <!DOCTYPE html>

  2. <html>

  3. <head>

  4.   <title> new document </title>

  5.   <meta charset="utf-8" />

  6. </head>



  7. <body><a href="http://weixin.com">go to weixin</a>

  8.   <script>

  9.      document.body.firstChild.setAttribute("target","_blank");

  10.   </script>

  11. </body>

  12. </html>在页面上点击 go to weixin ,实现页面跳转。     移除元素的属性:2种:    1. elem.removeAttribute("属性名")    2. elem.removeAttributeNode(属性节点对象)     判断是否包含指定属性:1种:    1. elem.hasAttribute("属性名")-->有,则返回true;没有,则返回false    总结:4个词:        attributes集合  elem.getAttribute  elem.setAttribute  removeAttribute  hasAttribute    HTML DOM:      获取/修改属性:elem.属性名      删除属性:elem.属性名="";      判断:if(elem.属性名)      Property  vs   Attribute       属性        html特性    Property: 内存中对象的属性,通常用.访问    Attribute: 指出现在页面html代码中的属性,只能通过get/setAttribute访问    标准属性:Property等效于Attribute        比如:a.setAttribute("href","url")——>核心DOM              a.href="url"; ——>HTML DOM   HTML标准属性:既是html元素的特性,同时又是内存中元素对象的属性   自定义属性:html也可以自定义属性 例如: li.setAttribute("age","25");==><li age="25"></li>          只能用getAttribute("age");-->25            li.age=25;===>仅存储在内存中,无法出现在页面元素上,只能用.获取                  自定义属性,核心DOM和HTML DOM不通用!     今后操作标准属性,用HTML DOM           因为所有标准属性都被HTMLXXXElement及其父类型预定义好了           特例:txt.setAttribute("class","类名");                 txt.className="类名";例如:
  13.      <!DOCTYPE HTML>

  14. <html>

  15. <head>

  16. <title>修改元素的属性</title>

  17. <meta charset="utf-8" />

  18. <script src="js/3_1.js"></script>

  19. </head>

  20. <body>

  21. <!--1. 使用自定义属性实现摇号排名-->

  22. <ul id="queue">

  23. <li>Tony</li>

  24. <li>Mary</li>

  25. <li>Jerry</li>

  26. <li>Tom</li>

  27. <li>Mark</li>

  28. <li>Jony</li>

  29. <li>Aomar</li>

  30. <li>North</li>

  31. </ul>

  32. </body>

  33. </html>
复制代码
下面是js文件:

  1.         window.onload=function(){

  2. //找到id为queue的ul元素,保存在变量ul中

  3. var ul=document.getElementById("queue");

  4. //找到ul下所有li保存在变量lis中

  5. var lis=ul.getElementsByTagName("li");

  6. //声明len变量保存lis的length

  7. var len=lis.length;

  8. //创建空数组nums,保存随机生成的数字

  9. var nums=[];

  10. //循环,直到nums的length等于len

  11. while(nums.length<len){

  12. //        在1~len之间生成一个随机整数保存在变量num中

  13. var num=Math.floor(Math.random()*len+1);

  14. if(nums.indexOf(num)==-1){//如果nums中不包含num

  15. nums.push(num)//将num压入nums中

  16. }

  17. }

  18. //遍历lis中每个li

  19. for(var i=0;i<len;i++){

  20. //        为当前li添加自定义属性"data-i",

  21. //        值为nums中相同位置的数字

  22. //lis[i].setAttribute("data-i",nums[i]);

  23. lis[i].dataset.i=nums[i];

  24. }

  25. //将类数组对象lis转为普通数组,再存回lis中

  26. lis=Array.prototype.slice.call(lis);

  27. //将lis按自定义属性data-i的值从小到大排序

  28. lis.sort(function(a,b){//a和b在运行时都指li

  29. return a.dataset.i-b.dataset.i;

  30. });

  31. ul.innerHTML="";//清空ul下所有子元素

  32. //遍历lis数组中每个li

  33. for(var i=0;i<len;i++){

  34. ul.appendChild(lis[i]);

  35. }

  36. }
复制代码
下面是页面效果:

    195656h38xixx7cw7nv835.png    

页面刷新一次后效果:

      195656h38xixx7cw7nv835.png   

    H5中自定义属性标准:

      h5规定:凡是自定义属性都要加data-前缀

      获取自定义属性值:a.dataset.属性名

      设置自定义属性值:a.dataset.属性名=


   问题:类数组对象能否转为数组?

              数组=Array.prototype.slice.call(类数组对象);

   问题:能否对类数组对象排序?2步:

        1. 数组=Array.prototype.slice.call(类数组对象);

        2. 数组.sort();
回复

使用道具 举报


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版| 赣南网

© 2013-2016 Comsenz Inc. Powered by Discuz! X3.4

用微信扫一扫

赣南网