zoukankan      html  css  js  c++  java
  • DOM元素遍历

    /*
        *返回元素e的第n层祖先算元素,如果不存在此类祖先或祖先不是Element,
        *(例如Document或者DocumentFragment)则返回null
        *如果n为0,则返回本身。如果n为1(或省略),则返回其父元素
        *如果n为2,则返回其祖父元素,依次类推
            
    */
    
    function parent(e, n) {
        if (n === undefined) {
            n = 1;
        }
        while (n-- && e) {
            e = e.parentNode;
        }
        if (!e || e.nodeType !== 1) {
            return null;
        }
    }
    
    /*
     *返回元素e的第n个兄弟元素
     *如果n为正,返回后续的第n个兄弟元素
     *如果n为负,返回前面的第n个兄弟元素
     *如果n为零,返回e本身
     */
    function sibling(e, n) {
        while (e && n !== 0) { //如果e未定义,即刻返回它。
            if (n > 0) {
                if (e.nextElementSibling) {
                    e = e.nextElementSibling;
                } else {
                    for (e = e.nextSibling; e.nodeType !== 1; e = e.nextSibling)
                    // 空循环
                }
                n--;
            } else { //查找前面的兄弟节点
                if (e.previousElementSibling) {e=e.previousElementSibling;}
                else{
                    for(e.previousSibling;e&&.nodeType!==1;e=e.previousSibling)
                        // 空循环
                }
                n++;
            }
        }
        return e;
    }
    
    /*
    *返回元素e的第n代子元素,如果不存在则为null
    *负值n代表从后往前计数,0代表第一子元素,而-1代表最后一个,-2代表倒数第二个,依次类推
    */
    
    function child(e,n){
        if (e.children) {//如果children数组存在
            if (n<0) {n+=e.children.length;}//转换负的n为数组索引
            if (n<0) {return null;}//如果仍然为负,说明没有子元素
            return e.children[n];//返回指定的子元素
        }
    
        //如果e没有children数组,找到第一个子元素并向前数,或者找到最好一个子元素并往回数
        if (n>=0) {//n非负数:从第一个子元素向前数
            if (e.firstElementChild) {e=e.firstElementChild;}
            else{
                for(e=e.firstChild;e&&e.nodeType!==1;e=e.nextSibling)
                {
                    //空循环
                }
                return sibling(e,n);//返回第一个子元素的第n个兄弟元素
            }
        }else{//n为负:从最后一个子元素往回数
            if (e.lastElementChild){e=e.lastElementChild;}
            else (e=e.lastChild;e&&e.nodeType!==1;e=e.previousSibling){
                //空循环
            }
        }
        return sibling(e,n+1);//+1来转化最后一个子元素为最后1个兄弟元素
    
    }
  • 相关阅读:
    在 Anaconda下解决国内安装tensorflow等下载慢和中断,出错,异常问题的一点思路
    关于指针和结构体的一点教训
    ARM cortexM4中断优先级的一点理解。
    ubuntu16下的/etc/resolv.conf重置的解决方案
    linux安装dpkg安装缺少依赖项的解决
    莲藕的简单凉菜制作总结
    单片机一种简便的printf调试方案。
    usart下位机输出使用printf的格式化技巧
    关于xp操作系统下使用VC6++编写的上位机软件在win10中运行的问题
    百度面试两板斧:手写算法问基础
  • 原文地址:https://www.cnblogs.com/superZz/p/5839499.html
Copyright © 2011-2022 走看看