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 效率低
何时使用:通过多级查找才能获得想要的元素时
原文:http://11108086.blog.51cto.com/11098086/1733450