首页 > 代码库 > DOM 3

DOM 3

1. 添加/删除元素

2. ***HTML DOM常用对象

   select/option    table/行分组/tr/td    form

 

1. 添加/删除元素:

  添加: 3步:

     1. 创建新的空元素:

         var a=document.createElement("a");

         相当于: <a></a>

     2. 设置元素的关键属性:

         a.href="http://tmooc.cn"

         a.innerHTML="go to tmooc";

         相当于: <a href="http://tmooc.cn">go to tmooc</a>

     3. 将元素添加到DOM树上:

         3种:

         1. 末尾追加: parent.appendChild(a)

         2. 插入在一个现有元素之前:

               parent.insertBefore(a,oldElem)

         3. 替换现有元素: parent.replaceChild(a,oldElem)

 

***页面加载过程:

    html->DOM Tree

                    ↓

                Render Tree->***layout->paint

                    ↑

    css->CSSRules

    结论: 只要修改DOM树的内容,都会导致重新layout

    解决: 优化: 尽量少的操作DOM树

        1. 如果同时添加父元素和子元素

                先再内存中将子元素添加到父元素,再将父元素一次性添加到DOM树

 

 

 

 

 

 

 

1. 添加/删除元素

2. ***HTML DOM对象

    select/option table/行分组/tr/td  form

 

1. 添加/删除元素

   优: 尽量少的操作DOM树

   如何:

     1. 如果同时添加父元素和子元素时,都要先将子元素添加到父元素,再将父元素整体添加到DOM树一次即可

     2. 如果同时添加多个平级元素时,都要用文档片段

      文档片段: DocumentFragment

         内存中临时存放多个平级元素的虚拟的临时父元素

         何时: 如果同时添加多个平级元素时,都要先将平级元素添加到文档片段中。再将文档片段一次性添加到DOM树

         如何:

           1. 创建文档片段:

              var frag=document.createDocumentFragment();

           2. 将子元素添加到frag中: frag.appendChild(child)

           3. 将frag添加到DOM树: parent.appendChild(frag)

               frag将子元素添加到DOM树后,自动释放。

 

    删除元素: 1. 先找到要删除的元素对象elem

                   2. parent.removeChild(elem)

        elem.parentNode.removeChild(elem);

 

2. ***HTML DOM常用对象:

    Image   Select/Option    Table/...     Form

  1. Image: 代表一个<img元素

      唯一的简化: var img=new Image();

  2. Select: 代表一个<select元素

      属性:

          .selectedIndex: 获得select中当前选中项的下标

          .options: 获得select中所有的option元素对象

          .options.length: option元素的个数

                                       =0可清除所有option

          其实select.length等效于select.options.length

              最简单的清除所有option的办法: select.length=0;

          .value: 当前select元素选中项的值

               2种情况:

                  1. 如果选中项有value属性,则使用选中项的value属性

                  2. 如果选中项没有value属性,则使用text作为value             

      方法:

         .add(option) => .appendChild

         .remove(i) => select.removeChild(select.options[i])

      事件:

         .onchange: 当选中项发生改变时  

 

      Option: 代表一个<option元素

        创建:

            var opt=new Option(text,value)

        属性:

            .index: 当前option在select中的下标

            .value:

            .text => .innerHTML

            selected:  

   

    其实向select中添加一个option的最简单写法:

       sel.add(new Option(text,value));

 

  3. Table: 代表<table元素

      table

          .createTHead()=>thead

          .deleteTHead()

          .tHead

              .insertRow(i) => tr //在i位置插入一个新行

                                省略i, 默认表示末尾追加

              .deleteRow(i);//删除i位置的行

              .rows //获得thead中的所有行对象

              .rows[i]=>tr

                属性: .rowIndex 获得当前tr相对于整个table的行下标

                                  .insertCell(i) => td //i位置添加一个新td

                                                   省略i, 默认表示末尾追加

                                  .deleteCell(i)

                                  .cells //获得行中的所有格

                                  .cells[i] => td

             

          .createTBody() tbody

          .tBodies/tBody

         

          .createTFoot() tfoot

          .deleteTFoot()

          .tFoot

 

    删除行:

      2种: 1. 用行分组.deleteRow(i)

                     i : 指的是行在当前分组内的下标位置

             2. 用table.deleteRow(i)

                    i: 指的是行在整个table中的下标位置

                           ——tr.rowIndex

       只要用rowIndex删除行,必须用table.deleteRow(...)

 

补: 三类对话框: 都不用

   alert("警告"); 

   var bool=confirm("确认提示");

       点确定->true

       点取消->false

   var input=prompt("输入提示")

         

         

     

 

DOM 3