美文网首页
【DOM】DOM中节点之间关系api(通过节点之间关系查询节点的

【DOM】DOM中节点之间关系api(通过节点之间关系查询节点的

作者: 动感超逗 | 来源:发表于2018-08-21 16:29 被阅读14次

    节点指针(通过节点之间关系查询节点的api)

    关系图谱

    image.png

    父关系api

    parentNode

    每个节点都有一个parentNode属性,它表示元素的父节点。Element的父节点可能是Element,Document或DocumentFragment

    子节点.parentNode
    

    parentElement

    返回元素的父元素节点,与parentNode的区别在于,其父节点必须是一个Element,如果不是,则返回null

    子节点.parentNode
    

    子关系api

    childNodes

    返回一个即时的NodeList,表示元素的子节点列表,子节点可能会包含文本节点,注释节点等。childNodes子节点列表集合(只读属性 有兼容性问题 )

    父节点.childNodes
    

    例子(子节点可能会包含文本节点,注释节点等)

    <ul id="ul1">
        <!--注释-->
        <li>11111</li>
        <li>22222</li>
        <li>3333</li>
        <li>44444</li>
    </ul>
    <script>
        var oUl = document.getElementById('ul1');
        console.log(oUl.childNodes);
    </script>    
    
    image.png

    从截图中可以看出 这段代码中ul的子节点有9个,这说明使用childNodes获取的节点包括了文本节点和元素节点
    childNodes 在低版本的ie 浏览器下获取的节点只包括元素节点,这就导致了兼容性问题!
    如何解决兼容性??
    根据子节点的nodeType属性值判断

    for (var i=0; i<oUl.childNodes.length; i++) {
    
        if ( oUl.childNodes[i].nodeType == 1 ) {
            oUl.childNodes[i].style.background = 'red';
        }
    
    }
    

    children

    一个即时的HTMLCollection,子节点都是Element,IE9以下浏览器不支持。children子节点列表集合(只读属性 推荐使用 )

    父节点.children
    

    例子

    <ul id="ul1">
        <!--注释-->
        <li>11111</li>
        <li>22222</li>
        <li>3333</li>
        <li>44444</li>
    </ul>
    <script>
        var oUl = document.getElementById('ul1');
        console.log(oUl.children);
    </script>
    
    image.png

    从截图中可以看出 这段代码中ul的子节点有4个,子节点都是Element

    firstChild和lastChild

    Node.firstChild 只读属性返回父节点的第一个子节点(node包括Element,text,注释节点;),如果节点是无子节点,则返回 null。
    Node.lastChild 只读属性返回父节点的最后一个子节点(node包括Element,text,注释节点;),如果没有子节点,则返回 null。

    firstElementChild和 lastElementChild (与上一个的区别就是获取的是Element而不是node)

    ParentNode.firstElementChild 只读属性,返回对象的第一个孩子 Element, 如果没有子元素,则为null。
    ParentNode.lastElementChild 只读属性返回对象的最后一个孩子Element ,如果没有子元素,则返回null。
    推荐使用

    总结
    firstChildlastChildchildNodes同样的存在兼容性问题,在低版本ie浏览器中只能获取到元素节点

    兄弟关系api

    previousSibling和nextSibling(获取的是node包括元素节点,文本节点,注释节点)

    previousSibling:节点的前一个节点,如果该节点是第一个节点,则为null。
    nextSibling:节点的后一个节点,如果该节点是最后一个节点,则为null。

    previousElementSibling和nextElementSibling(获取的是元素节点)

    返回前一个元素节点,前一个节点必须是Element,注意IE9以下浏览器不支持
    返回后一个元素节点,后一个节点必须是Element,注意IE9以下浏览器不支持
    推荐使用

    相关文章

      网友评论

          本文标题:【DOM】DOM中节点之间关系api(通过节点之间关系查询节点的

          本文链接:https://www.haomeiwen.com/subject/gkejiftx.html