js之DOM基础

一、DOM介绍

文档对象模型(Document Object Model),DOM描绘了一个层次化的节点树,运行开发人员添加、移除和修改页面的某一部分。

D(文档):整个web加载的网页文档。

O(对象):类似window对象之类的东西,可以调用属性和方法。

M(模型):网页文档的树形结构。

二、节点:

加载HTML页面时,web浏览器生成一个树形结构。

这些节点被称为元素。

节点被分为三类:

例如:<div title =“属性节点”>测试DIV</div>

1、元素节点:其实就是标签,<div></div>

2、文本节点:标签内的纯文本,测试DIV

3、属性节点:标签的属性,title=‘标签属性’。

三、元素节点方法

共有6种:

(1)getElementById()方法:

   参数传递一个标签的id值,这样就可以获取到该元素节点。

   PS:一个页面只能允许有一个id值,表示唯一性。

   i.元素节点属性:tagName:获取这个元素节点的标签名;

                   innerHTML:获取这个元素节点里面的文本。

                   innerHTML可以解析HTML标签。

   ii. HTML属性的直接调用

(2)getElementByTagName()方法:

   将返回一个对象数组HTMLCollection(NodeList),这个数组保存着所有相同元素名的节点列表。

  • 参数传递一个标签名即可。
  • 返回一个数组集合:[ObjectHTMLCollection]
  •  返回数组集合的其中一个元素,如果是<li></li>,则为:[Object HTMLLIElement]。

(3)getElementsByName()方法

   可以获取相同名称(name)的元素,返回一个对象数组HTMLCollection(NodeList)。

   通常name属性在input标签中合法,所以IE支持。

(4)getAttribute()方法:

   获取属性值。

(5)setAttribute()方法:

   将设置元素中某个属性和值。他需要接收两个参数:属性名和值。如果属性本身已经存在,那么就会被覆盖。

(6)removeAttribute()方法:

   移除HTML属性。

四、DOM节点

    (1)节点属性

节点可以分为元素节点、属性节点和文本节点,而这些节点又有三个非常常用的属性,分别是:


    PS:信息节点属性都必须在当前元素上操作才可以。

  • nodeValue和innerHTML的区别:

      @取值:在获取到文本节点的时候,是无法使用innerHTML这个属性输出文本内容的。这个非标准属性必须在获取元素节点的时候,才能输出里面包含的文本内容。

      @赋值:NodeValue会包含文本里的HTML转义成特殊字符,从而达到单纯文本的效果。

    (2)层次节点属性

     节点的层次结构可以划分为:父节点与子节点、兄弟节点这两种。当我们获取其中一个元素节点的时候,就可以使用层次节点属性来获取它相关层次的节点。


   (1)childNodes:

      获取当前元素节点的所有子节点。

      返回[object NodeList]:NodeList集合,返回当前元素节点所有的子节点列表。

   (2)firstChild和lastChild属性

       firstChild用于获取当前元素节点的第一个子节点,相当于childNodes[0];lastChild用于获取当前元素节点的最后一个子节点,相当于childNodes[box.childNodes.length-1]。

   (3)ownerDocument属性

       返回该节点的文档对象根节点,返回的对象相当于document。

   (4)parentNode、previousSibling、nextSibling属性

  • 返回该节点的父节点;
  • 返回该节点的前一个同级节点;
  • 返回该节点的后一个同级节点。

   (5)attributes属性:返回该节点的属性节点集合。

    返回[object NamedNodeMap]:集合数组,保存着这个元素节点的属性列表。

   (6)忽略空白文本

   两种解决方法:忽略空白字符、移除空白字符

    五、节点操作

    (1)createElement():

         创建一个元素节点。

    (2)appendChild():

         将一个新节点添加到某个节点的子节点列表的末尾。

    (3)createTextNode()

         创建一个文本节点。

<script type="text/javascript">
           window.οnlοad=function(){
              var box = document.getElementById('box');
              var p = document.createElement('p');//只是创建了一个元素节点
               box.appendChild(p);  //将新节点p添加到id=box的div里的子节点列表的末尾上。

              var text=document.createTextNode('测试DIV4');
               p.appendChild(text);  //把文本添加到p里面=把文本节点添加到子节点的末尾
               document.getElementsByTagName('body')[0].appendChild(text);//把text添加到div节点的后面
           }

       </script>
    </head>
    <body>
       <div id="box" title="标题" class="bbb">
           <p>测试DIV1</p>
           <p>测试DIV2</p>
           <p>测试DIV3</p>
       </div>
    </body> 
   (4)InsertBefore():

         可以把节点创建到指定节点的前面。

<script type="text/javascript">
           window.οnlοad=function(){
              var box = document.getElementById('box');
              var p=document.createElement('p');
               //box.parentNode就是body节点
               //在某一个元素节点前面添加一个节点,必须先得到他的父节点
               box.parentNode.insertBefore(p,box);  //在box的父节点添加一个p,就是在box前面添加一个元素节点
           }

       </script>
    </head>
    <body>
       <div id="box" title="标题" class="bbb">
           <p>测试DIV1</p>
           <p>测试DIV2</p>
           <p>测试DIV3</p>
       </div>
    </body>
    (5)replaceChild()

         可以把节点替换成指定的节点。

<script type="text/javascript">{


           window.οnlοad=function(){
              var span=document.getElementsByTagName('span')[0];
              var em=document.createElement('em');
               span.parentNode.replaceChild(em,span);
           }

       }
       </script>
    </head>
    <body>
       <span>开始</span>

       <div id="box" title="标题" class="bbb">
           <p>测试DIV1</p>
           <p>测试DIV2</p>
           <p>测试DIV3</p>
       </div>

       <span>结束</span>
    </body>
    (6)cloneChild():

         可以把子节点复制出来

<script type="text/javascript">{
           //克隆第一个p节点,放到p标签的末尾
           window.οnlοad=function(){
              var box = document.getElementById('box');
               var clone = removeWhiteNode(box).firstChild.cloneNode(true);//克隆一个节点,如果是true,就是把标签内的文本也克隆,如果是false,就是光克隆标签
               box.appendChild(clone);
           }
           //移除空白节点
           function removeWhiteNode(node){
               for(var i=0;i<node.childNodes.length;i++){
                   if(node.childNodes[i].nodeType === 3 && /^\s+$/.test(node.childNodes[i].nodeValue)){
                      node.childNodes[i].parentNode.removeChild(node.childNodes[i]);
                  }
               }
               return node;
           }
       }
       </script>
    </head>
    <body>
       <span>开始</span>

       <div id="box" title="标题" class="bbb">
           <p>测试DIV1</p>
           <p>测试DIV2</p>
           <p>测试DIV3</p>
       </div>

       <span>结束</span>
    </body>
    (7)removeChild():

         删除指定节点。

<script type="text/javascript">{
           //克隆第一个p节点,放到p标签的末尾
           window.οnlοad=function(){
              var box = document.getElementById('box');
               //删除box的第一个子节点
               box.removeChild(removeWhiteNode(box).firstChild);
               //删除整个box
               box.parentNode.removeChild(box);
           }
           //移除空白节点
           function removeWhiteNode(node){
               for(var i=0;i<node.childNodes.length;i++){
                   if(node.childNodes[i].nodeType === 3 && /^\s+$/.test(node.childNodes[i].nodeValue)){
                      node.childNodes[i].parentNode.removeChild(node.childNodes[i]);
                  }
               }
               return node;
           }
       }
       </script>
    </head>
    <body>
       <span>开始</span>

       <div id="box" title="标题" class="bbb">
           <p>测试DIV1</p>
           <p>测试DIV2</p>
           <p>测试DIV3</p>
       </div>

       <span>结束</span>
    </body>

总结:以上总结了我这几天来的学习成果。DOM是js的核心部分之一。这篇文章介绍了:6种元素节点方法,DOM节点中的节点属性以及6种层次节点属性;还有7种节点操作。接下来就该学习DOM进阶的知识了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值