关于nextsibling的信息
普通树变二叉树如何变?
树的左子结点作为二叉树的左子树结点,兄弟结点作为二叉树的右子节点。普通树变二叉树的转换过程:
在这个图里边,2是根结点的左子树结点,与2并列的3、4是2的兄弟结点,故转换成二叉树时,作为2的右子节点,类似的,5是3的左子树结点,故也是二叉树里3的左结点,6、7与5并列,就作为5的右子节点,类似的,4号结点也是一样。
分析查找二叉树的一些递归条件:
查找树的左、右子树各是一颗查找树。这个很明了,无可厚非。
若查找树的左子树非空,则其左子树上的各节点均小于根结点的值。如图:2和4都小于5。
若查找树的右子树非空,则其右子树上的各节点值均大于根节点的值。如图:6和8都大于5。
怎样获取一个元素节点后面的元素节点
可以使用
.nextSibling
或者
.nextElementSibling。
nextSibling
属性是获取节点后面的节点(可能是文本节点,可以是元素节点,也可以是注释节点等等)
nextElementSibling
是获取节点后面的第一个元素节点
举个例子:
我是第一个节点
我是文本
我是SPAN
document.getElementById(
'first'
).nextSibling
//
获取到
TextNode
我是文本
document.getElementById(
'first'
).nextElementSibling
//
获取到
SPAN
如何获取元素下的第一个子元素
Element.firstChild ?,是的,这是第一种方法,当然,通常来说支持 W3C 规范的浏览器,如 Firefox 等取到的应该是 TEXT_NODE 。很早之前,或者说现在最流行的方法可能是:
// 让我们假设要将它抽象出来,变成一个 util 对象的方法
var util = {};
util.first = function(element) {
if(!element) return;
var first= element.firstChild;
// 处理 w3c 浏览器中第一个子元素是 TEXT_NODE
// 并且需要考虑到有没有 COMMENT_NODE 的情况
while(first first.nodeType !==1) first = first.nextSibling;
return first;
}
现在浏览器支持一个叫 Element.firstElementChild 的属性,可以获取到第一个为元素的子节点。那么,我们的 API 可以变得更简单:
util.first = function(element) {
if(!element) return;
// 刚好 IE8 以下支持直接拿 firstChild
return element[element.firstElementChild ? 'firstElementChild' : 'firstChild'];
}
另外的两个实现方法:
// 通过 HTML5 的 querySelector,及 getElementsByTagName
util.first = function(element, tag) {
if(!element) return;
tag = tag || '*';;
return element.querySelector ? element.querySelector(tag) : element.getElementsByTagName(tag)[0];
}
// IE6 也支持的 children
util.first = function(element) {
return element element.children[0];
}