// 可移植的文档遍历函数 functionparent(e, n) { if (n === undefined) { n = 1; } while (n-- && e) { e = e.parentNode; } if (!e || e.nodeType !== 1) { returnnull; } return e; }
functionsibling(e, n) { while (e && n !== 0) { if (n > 0) { if (e.nextElementSibling) { e = e.nextElementSibling; } else { for (e = e.nextSibling; e && e.nodeType !== 1; e = e.nextSibling) { /* empty loop */ } } n--; } else { if (e.previousElementSibing) { e = e.previousElementSibling; } else { for (e = e.previousSibling; e && e.nodeType !== 1; e = e.previousSibling) { /* empty loop */ } } n++; } } return e; }
functionchild(e, n) { if (e.children) { if (n < 0) { n += e.children.length; } if (n < 0) { returnnull; } return e.children[n]; }
if (n >= 0) { if (e.firstElementChild) { e = e.firstElementChild; } else { for (e = e.firstChild; e && e.nodeType !== 1; e = e.nextSibling) { } } return sibling(e, n); } else { if (e.lastElementChild) { e = e.lastElementChild; } else { for (e = e.lastChild; e && e.nodeType !== 1; e = e.previousSibling) { } } return sibling(e, n + 1); } }