1. ***递归遍历节点树

      递归调用:函数内部又调用自己

      何时使用递归:遍历不确定层级深度的上下级机构时

      原理:在函数内部,调用任何函数,都会为新的函数调用创建新的EC。可实现一个函数,反复执行多项任务。

       深度优先遍历:优先遍历下级节点

  

   **arguments.callee引用的是当前调用的函数对象

       何时使用:递归内部必须用callee属性调用当前函数,

                          不能直接用函数名。


    节点树:由所有节点组成的树结构

    元素树:仅由元素节点组成的树结构


                              节点树                        元素树

          父节点:    parentNode            parentElementNode

   子节点集合:    childNodes                children

   第一个孩子:    firstChild                 firstElementChild

最后一个孩子:    lastChild                  lastElementChild

   前一个兄弟:    previousSibling    previousElementSibling

   后一个兄弟:    nextSibling             nextElementSibling

     children: IE8+

     其余:  IE9+


    遍历API:2个:

          NodeIterator:按照深度优先的原则向上或向下遍历节点

                                每次只引用一个节点对象

          如何使用:2步:

          1. 创建迭代器对象:

              var iterator=document.createNodeIterator(

        开始的节点对象,

                                           遍历节点的类型,//NodeFilter.SHOW_ALL

                                                          //NodeFilter.SHOW_ELEMENT

                                           null,false

                                   );

          2. 跳到下一个节点对象:var next=iterator.nextNode();

                 如果没有下一个节点,就返回null

              退一步,返回上一个节点:

var prev=iterator.previousNode();

              获得正在站的节点:iterator.referenceNode


        TreeWalker:自由遍历:保证基本深度优先功能的基础上

                                              添加了向任意方向跳转的额外方法

        如何使用:和NodeIterator基本功能完全一样

        额外方法:parentNode(), firstChild(), lastChild()

                          nextSibling(), previousSibling()


2. *查找:2大类:

      1. getXXX: 4个:

           按id查找1个元素对象:

var elem=document.getElementById("id值");

           按标签名查找多个子元素对象:

var nodeList=parent.getElementsByTagName("标签名");

           何时使用:获取某个父对象下指定子元素时使用

                           屏蔽空文本的干扰

           按name属性查找多个子元素对象:

var nodeList=parent.getElementsByName("name属性名");

           按类名查找多个子元素对象:HTML5新增,IE9+

var nodeList=parent.getElementsByClassName("样式类名");


      何时使用:只查找一次时


      2. Selector API:用CSS选择器选择元素——JQuery的核心

          2个:

          1. 仅选择第一个符合条件的元素:

                  var elem=parent.querySelector("选择器");

          2. 选择所有符合条件的元素:

                  var elems=parent.querySelectorAll("选择器");

          强调:elems非动态集合:包含了完整DOM对象和属性

     鄙视题:

        getXXX   vs    Selector API

        返回值:getXXX 返回动态集合

                       Selector API 返回非动态集合

        效率:getXXX 效率高

                  Selector API  效率低


    何时使用:通过多级查找才能获得想要的元素时