• JS函数:返回下一个元素节点而不是下一个节点


    function getNextElement(node)
    {
        if (node.nodeType == 1) return node;
        if (node.nextSibling) return getNextElement(node.nextSibling);
        return null;
    }

    关于浏览器对于换行符等理解成文本节点的问题,这个文章有详细讲解 浏览器对换行符理解成文本节点的原因研究

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8" />
    <title>javascript获取某节点下最后一个子元素节点 和 第一个子元素节点</title>
    </head>
    
    <body>
    <p>
    0
    <em>aaa</em>
    <em>bbb</em>
    </p>
    <script>
    //通过通配符获取到P元素节点下所有的元素节点,然后把节点数组长度-1,就是数组中最后一个数组元素的下标,由此可以得到最后一个元素节点
    var txt = document.getElementsByTagName("p")[0];
    var alle = txt.getElementsByTagName("*");
    //最后一个子元素节点
    alert(alle[alle.length-1].nodeName);
    //第一个子元素节点
    alert(alle[0].nodeName);
    //lastChild可以获取某节点下的最后一个节点,但是并不一定是元素节点,可能是文本节点,例如上面的html代码中</em>和</p>之间因为换行符而被浏览器理解成一个文本节点
    var e = txt.lastChild;
    alert(e.nodeName);
    //firstChild可以获取某节点下的第一个节点,但是并不一定是元素节点,可能是文本节点,例如上面的html代码中<p>和<em>之间的0
    var ee = txt.firstChild;
    alert(ee.nodeName);
    </script>
    </body>
    </html>

    DOM Core 提供了 lastChild 方法可以让我们获取某个节点下的最后一个节点,但是这个节点有可能不是元素节点,有可能是文本节点,因为有的浏览器可能会把换行符解释为一个文本节点,那么我们用 lastChild 就得不到我们想要的最后一个元素节点。上面提供的方法可以获取到。 

    总结:

    childNodes 可以获取某节点下的所有子节点,但是也包括文本节点,比如换行符就是文本节点

    而 getElementsByTagName("*") 则可以获取某节点下的所有子元素节点,不包括文本节点,然后把子元素节点数组的长度-1就得到了最后一个子元素节点

    同理,用子元素节点数组下标为0的那个可以获取到第一个子元素节点 

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8" />
    <title>javascript获取某节点后下一个兄弟元素节点</title>
    </head>
    
    <body>
    <p id="txt">
    <em>aaa</em>
    </p>
    test
    <p>
    <em>bbb</em>
    </p>
    <script>
    function getNextElement(node){
        if(node.nodeType == 1){
            return node;
        }
        if(node.nextSibling){
            return getNextElement(node.nextSibling);
        }
        return null;
    }
    var txt = document.getElementById("txt");
    var sib = getNextElement(txt.nextSibling);
    alert(sib.nodeName);
    alert(txt.nextSibling.nodeName);
    </script>
    </body>
    </html>

    DOM Core 提供了 nextSibling 方法可以让我们获取某个节点的下个兄弟节点,但是也有可能这不是个元素节点,是个文本节点,上面提供了一个可以直接获取下个兄弟元素节点的函数

    总结:

    nextSibling 可以获取某节点下个兄弟节点,但是也可能是文本节点

    而 getNextElement(node) 函数则可以获取某节点的下个兄弟元素节点,不包括文本节点,原理就是通过对比节点类型,1 是元素节点 2 是属性节点 3是文本节点

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8" />
    <title>javascript获取某节点上一个兄弟元素节点</title>
    </head>
    
    <body>
    <p>
    <em>aaa</em>
    </p>
    test
    <p id="txt">
    <em>bbb</em>
    </p>
    <script>
    function getPrevElement(node){
        if(node.nodeType == 1){
            return node;
        }
        if(node.previousSibling){
            return getPrevElement(node.previousSibling);
        }
        return null;
    }
    var txt = document.getElementById("txt");
    var sib = getPrevElement(txt.previousSibling);
    alert(sib.nodeName);
    alert(txt.previousSibling.nodeName);
    </script>
    </body>
    </html>

    根据 getNextElement(node) 可以很容易的就写出获取上一个兄弟元素节点的函数 getPrevElement(node)

  • 相关阅读:
    RabbitMQ系列教程之一:我们从最简单的事情开始!Hello World(转载)
    如何安装和配置RabbitMQ(转载)
    C++学习笔记-模板
    C++学习笔记-多态的实现原理
    C++学习笔记-多态的实现原理
    C++学习笔记-多态
    C++学习笔记-多态
    C++学习笔记-继承中的构造与析构
    C++学习笔记-继承
    C++学习笔记-封装
  • 原文地址:https://www.cnblogs.com/huanlei/p/2470624.html
Copyright © 2020-2023  润新知