DOM读取和修改节点对象属性

一、获取和修改元素间的内容(3种)

  1.innerHTML 获得/设置元素开始标签和结束标签之间的html原文

    固定套路:1.删除父元素下所有子元素:parent.innerHTML="";

         2.批量替换父元素下所有子元素:parent.innerHTML="所有子元素标签组成的html"

  2.textContent/innerText: 获得开始标签和结束标签之间的文本(去除标签)

    textContent 是DOM标准;innerText 是IE8;

  3.文本节点内容

    nodeValue

  示例:读取并修改元素内容

 1 <!DOCTYPE HTML>
 2 <html>
 3 <head>
 4 <title>读取并修改元素的内容</title>
 5 <meta charset="utf-8" />
 6 <style>
 7     select{width:100px;height:85px;}
 8     div{display:inline-block;width:50px}
 9 </style>
10 <script src="js/2_2.js"></script>
11 </head>
12 <body>
13     <!--假设两个select元素,分别保存备选地区列表和选中地区列表
14 实现两选择框之间选项的交换:
15     包括:当个选中项左右移动
16               多个选中项左右移动
17               全左移和全右移
18 要求:两个select中的地区都要按照名称首字母排序
19 -->
20     <select id="unsel" size="5" multiple>
21         <option>Argentina</option>
22         <option>Brazil</option>
23         <option>Canada</option>
24         <option>Chile</option>
25         <option>China</option>
26         <option>Cuba</option>
27         <option>Denmark</option>
28         <option>Egypt</option>
29         <option>France</option>
30         <option>Greece</option>
31         <option>Spain</option>
32     </select>
33     <div>
34 <button onclick="move(this)">&gt;&gt;</button>
35 <button onclick="move(this)">&gt;</button>
36 <button onclick="move(this)">&lt;</button>
37 <button onclick="move(this)">&lt;&lt;</button>
38     </div>
39     <select id="sel" size="5" multiple>
40     </select>
41 </body>
42 </html>
View Code
 1 //定义两个数组:
 2 //    unsel:存所有未选中的国家(左边的)
 3 //    sel:存所有选中的国家(右边)
 4 var unsel=null;
 5 var sel=null;
 6 
 7 //封装$
 8 window.$=function(selector){
 9     return document.querySelectorAll(selector);
10 }
11  //当页面加载后
12 window.onload=function(){
13     /*初始化unsel  "</option>"*/
14     unsel=$("#unsel")[0].innerHTML.trim().slice(8,-9).split(/<\/option>\s*<option>/);
15     //console.log(unsel);
16     sel=[];
17 
18 }
19 /**/
20 function move(btn){
21     //如果btn的内容是>>
22     if (btn.innerHTML=="&gt;&gt;") //btn.textContent==">>" textContent会对字符进行转义
23     {
24         //将unsel中的所有元素,拼入sel,对新数组排序
25         sel=sel.concat(unsel);
26         sel.sort();
27         unsel=[];
28         //console.log(sel);
29     }else if (btn.innerHTML=="&lt;&lt;")
30     {//如果btn的内容是<<
31         unsel=unsel.concat(sel);
32         unsel.sort();
33         sel=[];
34         //console.log(unsel);
35     }else if (btn.innerHTML=="&gt;")
36     {//如果btn的内容是>
37         var opts=$("#unsel option");
38         //option对象的selected属性==>true/false
39         //获得unsel下的所有option对象
40         console.log(opts.length);
41         //遍历所有的option
42         for (var i=opts.length-1; i>=0; i--)
43         {
44             //只要当前option的selected有效
45             if (opts[i].selected)
46             {
47                 //使用splice删除unsel中的相同位置的元素,将删除的元素压入sel中
48                 sel.push(unsel.splice(i,1)[0]);
49                 //如果在遍历过程中会影响到下标,建议从后向前遍历
50             }
51         }
52         //遍历结束,对sel进行排序
53         sel.sort();
54 
55     }else if (btn.innerHTML=="&lt;")
56     {//如果btn的内容是<
57         var opts=$("#sel option");
58         //console.log(opts.length);
59         for(var i=opts.length-1; i>=0; i--){
60             if(opts[i].selected){
61                 unsel.push(sel.splice(i,1)[0]);
62             }
63         }
64         unsel.sort();
65     }
66     //更新界面 
67     updateSel();
68 }
69 function updateSel(){
70     //专门跟新两个select元素的内容
71     //
72     $("#unsel")[0].innerHTML="<option>"+unsel.join("</option><option>")+"</option>";
73     $("#sel")[0].innerHTML="<option>"+sel.join("</option><option>")+"</option>";
74 }
View Code

二、获取、添加、删除、修改元素属性

  getAttribute("属性名")  获取元素对象指定特性的值

  setAttribute(name, value)  设置元素对象指定特性的值

  removeAttribute('属性名')  删除元素对象上的指定特性

  hasAttribute('属性名')  判断元素对象是否包含指定特性

  attributes()  获取元素对象指定特性的集合

  1.读取属性(4种)

    element.attributes[下标].value

    var value=element.attributes['属性名']

    element.getAttributeNode('属性名').value

    var value=element.getAttribute("属性名")

  2.修改属性(2种)

    element.setAttribute(name, value);//IE8不支持 只能:element.attributes['属性名']=value

    element.setAttributeNode(attrNode);//属性可以是属性节点

  3.移除属性(2种)

    element.removeAttribute('属性名');

    element.removeAttributeNode(attrNode);

  4.判断元素是否包含属性(2种) 

    element.hasAttribute('属性名') //true或false

    element.hasAttributes( );

  5.Property(属性) vs Attribute(HTML特性)

    Property: 对象在内存中存储的属性 可以用 . 访问

    Attribute: 元素对象在开始标签中定义的HTML属性和自定义属性

    访问HTML标准属性时,二者完全一致。如果访问自定义属性时,只能用Attribute。

  示例:修改元素属性 模拟摇号排序

 1 <!DOCTYPE HTML>
 2 <html>
 3 <head>
 4 <title>修改元素的属性</title>
 5 <meta charset="utf-8" />
 6 <script src="js/3_1.js"></script>
 7 </head>
 8 <body>
 9     <!--1. 使用自定义属性实现摇号排名-->
10     <ul>
11         <li>Eric</li>
12         <li>Scott</li>
13         <li>Jerry</li>
14         <li>Tom</li>
15         <li>Rose</li>
16         <li>John</li>
17         <li>Smith</li>
18         <li>Andy</li>
19     </ul>
20 </body>
21 </html>
View Code
 1 window.onload=function(){
 2     //获得ul下所有li
 3     var lis=document.querySelectorAll("ul li");
 4     var nums=[];
 5     //反复生成随机数,nums.length<lis.length
 6     //    在1到lis.length之间取1个随机正数n
 7     //    利用nums的indexOf方法,查找是否包含n
 8     //    如果不包含,将n压入nums中
 9     while (nums.length<lis.length)
10     {
11         var n=parseInt(Math.random()*(lis.length-1+1)+1);
12         if(nums.indexOf(n)==-1){
13             nums.push(n);
14         }
15     }
16     console.log(nums);
17     //将nums中的数字,保存到每个li的data-i自定义属性中
18     //遍历nums
19     //    将nums中当前的数字,设置到相同位置的li中的data-i特性上
20     for (var i=0; i<nums.length; i++)
21     {
22         lis[i].setAttribute("data-i",nums[i]);803490
23     }
24     
25     //将类数组最想转化为标准数组对象
26     lis=Array.prototype.slice.call(lis);
27     //尽让li的data-i特性相减
28     lis.sort(function(a,b){
29         return a.getAttribute("data-i")-b.getAttribute("data-i");
30         //return a.dataset.i-b.dataset.i;//HTML5中读取自定义属性; "data-xxx"-->dataset的集合中,属性名xxx
31         });
32 
33     //清空所有旧li
34     ul=document.querySelector("ul");
35     ul.innerHTML="";
36     
37     for (var i=0; i<lis.length; i++)
38     {
39         //将li追加到ul中
40         ul.appendChild(lis[i]);
41     }
42     console.log(lis);
43 }
View Code

 

三、获取和修改元素的样式

  1.获取或修改内联样式:style对象

    设置:style.属性名="值";   

    移出(2种):
      style.属性名="";
      style.removeProperty("CSS属性名")

    //仅能操作style属性中定义的内联样式,无法获取或设置样式表中的样式

  2.获取或修改内联样式表中的属性(3步)

    1. 获得要修改的样式表对象:

    var sheet=document.styleSheets[i];//styleSheets:获得当前网页的所有样式表对象

    2. 获得要修改的cssRule:

    cssRule:样式表中一个大括号就是一个cssRule对象

    var cssRule=sheet.cssRules[i];//cssRule可能嵌套。

    3. 获得cssRule中的属性

    cssRule.style.属性名

    

 

posted @ 2015-10-25 17:43  Medeor  阅读(7180)  评论(0编辑  收藏  举报