// 兼容火狐获取一个节点的相同类型的上一个相邻节点 function perviousSiblingSameType(node , cnode ) { // 为空直接返回null if(node.previousSibling == null ) { return null ; } else { // 节点类型不相等继续递归 if(node.previousSibling.nodeType != cnode.nodeType) { return perviousSiblingSameType(node.previousSibling , cnode); } // 节点类型相等则返回 else if(cnode.nodeType == node.previousSibling.nodeType) { return node.previousSibling ; } } } // 兼容火狐获取一个节点的相同类型的下一个相邻节点 function nextSiblingSameType(node , cnode) { // 为空直接返回null if(node.nextSibling == null ) { return null ; } else { // 节点类型不相等继续递归 if(node.nextSibling.nodeType != cnode.nodeType) { return nextSiblingSameType(node.nextSibling , cnode); } // 节点类型相等则返回 else if(cnode.nodeType == node.nextSibling.nodeType) { return node.nextSibling ; } } }