美文网首页
DOM学习——Node类型

DOM学习——Node类型

作者: 飞鸟颜 | 来源:发表于2016-12-28 23:14 被阅读0次

childNodes

1.节点获取

获取子节点:某个节点.childNodes[序号] / 某个节点.childNodes.item(序号);
序号从零开始
(* ̄(oo) ̄)注:节点包括文本节点和元素节点!!

eg: 

      <div>
            <ul id="aa">
                <li><a href="#">1</a></li>
                <li><a href="#">2</a></li>
                <li><a href="#">3</a></li>
            </ul>
            <span>
                aa
            </span>
        </div>
        <script>
            var ul1 = document.getElementById("aa");
            var firstNode = ul1.childNodes[0];
            var firstNode2 = ul1.childNodes.item(0);
            alert(firstNode.nodeName);
            alert(firstNode2.nodeName);
        </script>

节点的关系:nextSibling / previousSibling
如果一个父节点只有一个子节点,那么,父节点的firstChild和lastChild都是这个子节点,这个子节点的 nextSibling / previousSibling 的值都是null;

2.节点增删改

增:前提是新建

appendChild(),添加到childNodes列表的最后面

eg:
        <div>
            <ul id="aa">
                <li><a href="#">1</a></li>
                <li><a href="#">2</a></li>
                <li><a href="#">3</a></li>
            </ul>
        </div>
        <script>
            var ul2 = document.getElementById("aa");
            var newChild = document.createElement("li");
            var txt = document.createTextNode("我是新的");
            newChild.appendChild(txt);
            ul2.appendChild(newChild);
        </script>
<!--这里是线创建一个li元素节点,然后新建一个文本节点,把文本节点添加到元素节点里面,
(在一个元素节点里面有文本节点,那么该文本节点就是这个元素节点的子节点),
再把整个节点添加到ul的、childNodes列表的最后面-->

插入:insertBefore

在前面插入

eg:
<div>
            <ul id="aa">
                <li><a href="#">1</a></li>
                <li><a href="#">2</a></li>
                <li><a href="#">3</a></li>
            </ul>
        </div>
        <script>
            var ul2 = document.getElementById("aa");
            var newChild = document.createElement("li");
            var txt = document.createTextNode("我是插入的");
            newChild.appendChild(txt);
            
            var li2 = ul2.childNodes[1];
            ul2.insertBefore(newChild,li2);
        </script>

在后面插入
(* ̄(oo) ̄)DOM并没有提供insertAfter方法。。。
要实现的就自己造一个

<div>
            <ul id="aa">
                <li><a href="#">1</a></li>
                <li id="bb"><a href="#">2</a></li>
                <li><a href="#">3</a></li>
            </ul>
        </div>
<script>
var newChild = document.createElement("li");
            var txt = document.createTextNode("我是插入的");
            newChild.appendChild(txt);
            
            var target = document.getElementById("bb");
            function insetAfter(newChild,target){
                var parent = target.parentNode;
                if(target == parent.lastChild){
                    parent.appendChild(newChild);
                }
                else{
                    parent.insertBefore(newChild,target.nextSibling);
                }
                
            }
            insetAfter(newChild,target);
            
        </script>

替换:replaceChild()

<div>
            <ul id="aa">
                <li><a href="#">1</a></li>
                <li id="bb"><a href="#">2</a></li>
                <li><a href="#">3</a></li>
            </ul>
        </div>
<script>
var ul2 = document.getElementById("aa");
            var newChild = document.createElement("li");
            var txt = document.createTextNode("我是替换的");
            newChild.appendChild(txt);
            
            var target = document.getElementById("bb");
            ul2.replaceChild(newChild,target);
            
        </script>

移除:removeChild()

//移除
<div>
           <ul id="aa">
               <li><a href="#">1</a></li>
               <li id="bb"><a href="#">2</a></li>
               <li><a href="#">3</a></li>
           </ul>
       </div>
<script>
           var ul2 = document.getElementById("aa");

           var target = document.getElementById("bb");
           ul2.removeChild(target);
       </script>
//因为replaceChild、removeChild的节点都是包含文本节点的,所以在使用firstChild和lastChild的时候要注意,当前节点是否为文本节点。

比如下面就会看起来没有变化
<div>
           <ul id="aa">
               <li><a href="#">1</a></li>
               <li id="bb"><a href="#">2</a></li>
               <li><a href="#">3</a></li>
           </ul>
       </div>
<script>
           var ul2 = document.getElementById("aa");

           var target = document.getElementById("bb");
           ul2.removeChild(ul2.firstChild);
       </script>
上面这几种方法都是在操作某个节点的子节点,所以在使用这些方法之前必须获取父节点,并且,并不是所有节点都有子节点,如果在不支持子节点的节点使用这些方法,就会导致错误的发生。

·

克隆:cloneNode()

<div>
            <ul id="aa">
                <li><a href="#">1</a></li>
                <li id="bb"><a href="#">2</a></li>
                <li><a href="#">3</a></li>
            </ul>
        </div>
<script>
var ul2 = document.getElementById("aa");
            var newclone = ul2.cloneNode(true);
            var newclone2 = ul2.cloneNode(false);
            document.body.appendChild(newclone);
            document.body.appendChild(newclone2);
</script>
//参数true:复制节点以及整个子节点树
//参数为false:只复制节点,不会复制子节点

相关文章

  • DOM学习——Node类型

    childNodes 1.节点获取 获取子节点:某个节点.childNodes[序号] / 某个节点.ch...

  • DOM API 类型

    粗略的过一遍DOM API DOM类型 Node类型 Node接口是 DOM1级就定义了, Node接口定义了 1...

  • dom 文档树的节点类型

    参考 lib.dom.d.ts,与 Dom 树相关的节点类型 Element Document Node Node...

  • DOM编程之API总结篇

    原文 链接 一、基本类型介绍 1.1 Node类型 DOM1级定义了一个Node接口,该接口由DOM中所有节点类型...

  • DOM

    DOM1级定义了一个Node接口,该接口由DOM中所有节点类型实现。这个Node接口在JS中是作为Node类型实现...

  • Javascript操作DOM常用API总结

    Node类型 DOM1级定义了一个Node接口,该接口由DOM中所有节点类型实现。这个Node接口在JS中是作为N...

  • 【DOM】Node类型

    DOM1级定义了一个Node接口,该接口由DOM中的所有节点类型实现。这个Node接口在JavaScript中作为...

  • DOM(Node 类型)

    DOM(文档对象模型)是针对 HTML 和 XML 文档的 API 。DOM 描绘了一个层次化的节点树,允许开发人...

  • JavaScript高级程序设计笔记10

    DOM 节点层次 (1)Node类型 (2)Document类型 (3)Element类型 (4)Text类型 (...

  • Javascript DOM操作常用API汇总

    目录 1. 基本概念 1.1 Node类型 DOM1级定义了一个Node接口,该接口由DOM中所有节点类型实现。这...

网友评论

      本文标题:DOM学习——Node类型

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