1.DOM:文档对象模型(Document Object Model)
 1)子节点:只是这一代的后代,不会计算后代的后代
    1.childNodes:获取子节点,
      --IE6-8:获取的是元素节点,正常
      --高版本浏览器:但是会包含文本节点和元素节点(不正常)

  2.nodeType:节点的类型
      --nodeType=3-->文本节点
      --nodeTyPE=1-->元素节点
      所以获取元素节点兼容的方法:
        for(var i=0;i<oUL.childNodes.length;i++){
          if(oUl.childNodes[i].nodeType==1){
            oUl.childNodes[i].style.background='red';
          }
        }
   3.children属性:只获取元素节点,不获取文本节点,比上面的好用所以我们一般获取子节点时,最好用这个属性

2)父节点:
    1.parentNode:获取某一个元素的父节点(获取的是直接父级)
      --this.parentNode.style.display='none';

2.offsetParent:获取元素相对定位的父级(会根据样式的不同而不同)
      (若CSS中直接父级没有定位,会直接往上面找,直到找到有定位的父级)

    3.firstChild/firstElementChild:第一个子节点
      lastChild/lastElementChild:最后一个子节点
      nextSibling/nextElementSibling:下一个兄弟节点
      previousSibling/previousElementSibling:上一个兄弟节点
      --IE6-8下兼容:firstChild,lastChild,nextSibling,previousSibling,
          (高版本浏览器IE9+,FF,Chrome不兼容,其获取的空白文本节点)
      --高版本浏览器下兼容:firstElementChild,lastElementChild,nextElementSibling,previousElementSibling
          (低版本浏览器IE6-8不兼容)
      --兼容写法:
        if(oUl.firstElementChild){
          oUl.firstElementChild.style.background='red';
        }else{
          oUl.firstChild.style.background='red';
        }

  3)DOM方式操作元素的属性:
    (之前学过.和[]操作属性的方法,可以下面的互换)
    1)设置属性:element.setAttribute(属性名称,值)
    2)获取属性:element.getAttribute(属性名称)
    3)删除属性:element.removeAttribute(属性名称)

  4)获取元素的方法:
    --document.getElementById()
    --document.getElementsByTagName()
    --document.getElementsByName()
    --封装一个通过class获取元素的函数
      function getByClass(oParent,sClass){
        var arr=[];
        aEle=oParent.getElementByTagName('*');
        for(var i=0;i<aEle.length;i++){
          if(aEle[i].className==sClass){
            arr.push(aEle[i]);
          }
        }
        return arr;    //把所有得到的元素放进数组里面返回出去
      }
     var aBtn=getByClass(oUl,'list');
      for(var i=0;i<aBtn.length;i++){
        aBtn[i].style.background='red';
      }

5)DOM操作应用:
    1.创建元素: document.createElement('li');
    2.设置或返回元素的inner HTML:  element.innerHTML
    3.向元素的最后添加新的子节点: 父级.appendChild(子节点)
    4.向元素的最前面添加新的子节点:父级.insertBefore(子节点,在谁之前)
      insertBefore在IE下不行,因为ul里面本来没有li,找不到第一个元素子节点
      --兼容写法
        if(aLi.length>0){    //假如里面原来有li子元素
          oUl.insertBefore(cLi,aLi[0]);
        }else{    //原来没有元素,直接appendChild即可
          oUl.appendChild(cLi);
        }
      例:创建元素和插入元素:
        1)创建一个元素:var cLi=document.createElement('li');
        2)给创建的元素节点添加文本节点:cLi.innerHTML=oTxt.value;
        3)将创建的子节点添加到某个父级元素里面:oUl.appendChild(cLi);

    5.从元素中删除子节点:
      element.removeChild()-->父级.removeChild(子节点);
      var list=document.getElementById("myList");
      list.removeChild(list.childNodes[0]);
      删除之前:Coffee,Tea,Milk
      删除之后:Tea,Milk

6.element.hasAttribute():如果元素拥有指定属性,则返回true,否则返回 false
        document.getElementsByTagName("BUTTON")[0].hasAttribute("onclick"); //true

7.element.hasChildNodes():如果元素拥有子节点,则返回 true,否则 false
        document.body.hasAttributes();    //false

6)文档碎片:(现在基本上已经不用,高版本浏览器性能提高不大)
    --创建一个文档碎片:var oFrag=document.createDocumentFragment()
    --可以提高DOM操作的性能
    --原理:假如我需要差很多元素到文档中,每插入一个元素,页面需要重新渲染一次,
      插入多个页面需要渲染多次,性能比较低,这时候就可以将这些要插入的
      元素放入到文档碎片中,最后一次性插入,一次性渲染,性能较高

2.BOM:浏览器对象模型(Browser Object Model)
  1.Window对象:
    1)特点:所有浏览器都支持window对象,它表示浏览器窗口
        所有 JavaScript 全局对象,函数以及变量均自动成为window对象的成员
        全局变量是window对象的属性
        全局函数是window对象的方法
        甚至 HTML DOM 的document也是window对象的属性之一
        document.getElementById("header")完整写法为:window.document.getElementById("header");

2)Window对象属性:(其实全局对象都是Window对象的一个属性,只不过我们平时使用时都是省略window的,
      直接使用这些全局对象,下面会对全局对象做具体介绍)
      1.window.colsed:返回窗口是否已被关闭(true,false)
      2.window.document:对Document对象的只读引用
      3.window.history:对History对象的只读引用
      4.window.location:用于窗口或框架的Location对象
      5.window.Navigator:对Navigator对象的只读引用
      6.window.Screen:对Screen对象的只读引用

3)Window对象方法:全局的函数(如alert())也是Window对象方法,有些我们平时使用时也是省略window,直接使用
      1.打开窗口:
        --window.open('about:blank')==>新弹出来一个空白页
        --window.open('about:blank','_self')==>在当前窗口打开一个新的
        --window.open('about:blank','_blank')==>新弹出来一个空白页,以前的窗口还在,默认为blank
        window.open方法打开的窗口是有返回值的,返回的是当前新打开的窗口,也是一个窗口对象
        例子:在新打开的窗口中写文字
        oBtn.onclick=function(){
            var newWindow=window.open('about:blank');
            newWindow.document.write(oTxt.value);
        };

2.关闭窗口:
      --window.close()==>在谷歌下可以关闭,在IE会有提示,在火狐下会禁止脚本关闭用户打开的窗口
      --需要将用户打开的窗口先open打开,再close才有用
      <input type='button' value='open' onclick="window.open('close.html');" />
      <input type='button' value='close' onclick="window.close();" />

3.定时器的使用:
          1)间隔性:setInterval(fn,毫秒数)    //作用是每隔多少时间执行一次函数
          2)延时性:setTimeout(fn,毫秒数)     //过多久执行一次函数,只执行函一次
          3)关闭定时器:clearInterval()/clearTimeout()
              是指从下一次开始关闭定时器,但是函数后面的代码会继续执行完毕,
              所以一般将函数后面的代码写在else里面与关闭定时器分割开来
            如何'开'或者'关'一个定时器
              <input id="btn1" type="button" value="打开" />
              <input id="btn2" type="button" value="关闭" />
              <script>
                  window.onload=function(){
                      var oBtn1=document.getElementById('btn1');
                      var oBtn2=document.getElementById('btn2');
                      var timer=null; //打开一个定时器
                      oBtn1.onclick=function(){
                          //setInterval返回上面打开的定时器
                          timer=setInterval(function(){
                              alert('a');
                          },1000);
                      }
                      oBtn2.onclick=function(){
                          //关闭时直接关闭上面打开的计时器即可
                          clearInterval(timer);
                      }
                  }
              </script>

4.窗口尺寸:
        可视区尺寸:document.documentElement.clientWidth
                            document.documentElement.clientHeight
        滚动条滚动距离(滚动条高度):
                IE,Chrome:document.body.scrollTop
                FF:document.documentElement.scrollTop
        兼容处理:var scrollTop=document.documentElement.scrollTop||document.body.scrollTop

5.系统对话框:(用的较少)
          --警告框:alert('内容');    ==>没有返回值
          --选择框:confirm('提问的内容');        ==>返回boolean值(确定返回true,取消返回false)
          --输入框:prompt('提示内容','默认值');        ==>返回当前输入的字符串或null

6.window对象常用事件:window.onload,window.onscroll,window.onresize
        关于CSS中的固定定位fixed:IE6不兼容,position:fixed
        所以要想做右下角的固定小广告,需要用js实现,不能直接fixed固定
        问题1:当窗口改变大小时,右下角oDiv并不随着改变位置,需要用到window.onresize
        问题2:右下角小的oDiv会在滚动时出现抖动现象,可以做一个判断
                    userAgent>IE6==>fixed
                    IE6==>用运动解决  (在JS运动里面会讲到运动)
        window.onscroll=window.onresize=function(){
            var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;
            var oDivheight=oDiv.offsetHeight;
            var clientHeight=document.documentElement.clientHeight;
            var Top=clientHeight-oDivheight+scrollTop;
            oDiv.style.top=Top+'px';
        }

2.Navigator对象:包含有关浏览器的信息
    navigator.appName:返回浏览器的名称
    navigator.appVersion:返回浏览器的平台和版本信息
    navigator.userAgent:返回由客户机发送服务器的user-agent头部的值(也有当前的浏览器和浏览器版本信息)
    判断浏览器:
    mozilla = /firefox/.test(navigator.userAgent.toLowerCase());
    webkit = /webkit/.test(navigator.userAgent.toLowerCase());
    opera = /opera/.test(navigator.userAgent.toLowerCase());

3.Screen对象:包含有关客户端显示屏幕的信息
  JS中有几个对象的用处不大,而Screen对象就是其中之一,Screen对象基本上只用来表明客户端的能力,不详细说明了

4.History对象:包含用户(在浏览器窗口中)访问过的URL
  1)History对象的属性:
    length属性:返回浏览器历史列表中的URL数量,对于刚加载到窗口的第一个页面而言history.length=0

2)History对象的方法:
    1.history.go():可在用户历史记录中任意跳转,可以向后,也可以向前
      go()方法参数为数字时:
        后退一步:history.go(-1);
        前进一步:history.go(1);
        前进两步:history.go(2);
      go()方法参数为字符串时:此时浏览器会跳到历史记录中包含该字符串最近的位置,可能前进,也可能后退,
          具体看参数字符串离哪个历史记录近.
        跳到最近的 baidu.com 页面:history.go('baidu.com');

2.history.back():代替history.go()方法的后退一步
        后退一步:history.back();

3.history.forward():代替history.go()方法的前进一步
        前进一步:history.forward();

5.Location对象:
  是最有用的BOM对象之一,它提供了与当前窗口中加载的文档有关的信息
  location对象是一个很特别的对象,因为它既是window对象的属性也是document对象的属性,
  也就是说:window.location与document.location引用的是同一个对象。

1)Location对象属性:
    --location.hash设置或返回从井号(#)开始的UR(锚),如果没有此系列,则返回空字符串
      location.hash="#part2";
      document.write(location.hash);
    --location.host:设置或返回服务器名称和当前URL的端口号   'localhost:8080'
    --location.hostname:设置或返回不带端口号的服务器名称   'localhost'
    --location.href:设置或返回当前加载页面的完整URL,而location对象的toString()方法也返回这个值
      'http://localhost/learnjs/drag.html'
    --location.pathname:设置或返回URL中的目录和(或)文件名    '/learnjs/drag.html'
    --location.port:设置或返回当前URL的端口号,若无则返回空字符串   '8080'
    --location.protocol:设置或返回页面使用的协议。通常为http:或https:
    --location.search:设置或返回URL的查询字符串.这个字符串以问号开头  '?q=javascript'

2)查询字符串参数:虽然上面的属性可以访问到location的大多数信息,但访问URL包含的查询字符串的属性并不完整
    虽然location.search可以返回从问号到URL末尾的所有内容,但不能访问其中的每个查询字符串参数
    创建函数,用以解析查询字符串,返回包含所有参数的一个对象:
    function getQueryArgs(){
      //取得查询字符串并去掉开头的问号
      var qs=(location.search.length>0 ? location.search.substring(1) : '');
      //定义保存数据的对象
      var args={};
      //取得每一项:
      var items=qs.length ? qs.split('&') : [];
      var item=null;
      var name=null;
      var value=null;
      //逐个将每一项添加到args对象中
      for(var i=0;i<items.length;i++){
        item=items[i].split('=');
        name=decodeURIComponent(item[0]);
        value=decodeURIComponent(item[1]);
        if(name.length){
          args[name]=value;
        }
      }
      return args;
    }
    //假设查询的字符串是:?a=1&B=2
    var args=getQueryArgs();
    alert(args['a']);   //1
    alert(args.B);    //2

3)Location对象方法:
    --location.assign('URL'):加载新文档,可以打开一个新的文档,并在浏览器中添加一条历史记录
    --window.location='URL'/location.href='URL'与location.assign('URL')作用相同.
      在这些打开新文档的方法中,常用的是location.href属性
    --location.reload():重新加载当前文档
      没有参数时,页面会以最有效的方式重载,即可能从浏览器缓存中重新加载
      有参数(true)时:从服务器从新加载
      location.reload();  //可能从缓存中加载
      location.reload(true);  //从服务器重新加载
      注:位于reload()调用之后的代码可能会也可能不会执行,这要取决于系统资源和网络延迟等情况,
        因此reload()最好放在代码最好一行.
    --location.replace():用新的文档替换当前文档,也是加载新文档,replace()方法不会往历史记录中添加一个新的记录.
      当使用该方法时,新的URL将覆盖History对象中的当前记录,而上面介绍的方法都会生成一条新的历史记录
      如果想要禁止用户通过'后退'按钮返回到前一个页面(既不想添加一条历史记录),就可以使用replace()方法
        oBtn.onclick=function(){
          location.replace('http://localhost/learnjs/index.html');
        };

DOM,BOM的更多相关文章

  1. Javascript组成--ECMAScript,DOM,BOM

    ECMAScript 部分 ECMAScript是一个标准,JS只是它的一个实现,其他实现包括ActionScript; “ECMAScript可以为不同种类的宿主环境提供核心的脚本编程能力”,即EC ...

  2. ECMAscript,DOM,BOM哪个比较重要

    ECMA > DOM > BOM ECMA是JS的核心,语法.变量.对象.各种对象的API.作用域.原型链.闭包.This指向.构造函数等等必须要熟练,有了这些基础你才能去熟练的操作DOM ...

  3. javascript高级笔记——内含事件,DOM,BOM等

    JavaScript高级笔记 1,DOM的简单学习 1.1,功能:用于控制HTML文档的内容: 1.2,获取页面标签对象:Element *document.getElementById(" ...

  4. JS ——DOM,BOM(包含盒模型,动画)总结

    JS盒模型 content: 通过计算后样式获取padding + content: box.clientWidth | box.clientHeightborder + padding + cont ...

  5. day4 DOM,BOM

    1.     BOM编程 1.1. BOM编程基础 全称 Browser Object Model,浏览器对象模型. JavaScript是由浏览器中内置的javascript脚本解释器程序来执行ja ...

  6. 前端基础之DOM和BOM

    前端基础之DOM和BOM JavaScript分为 ECMAScript,DOM,BOM. BOM(Browser Object Model)是指浏览器对象模型,它使 JavaScript 有能力与浏 ...

  7. day 52 js学习 DOM 和BOM

    前戏 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的一些交互,我们需要继续学习BOM和DO ...

  8. JavaScript--DOM,BOM

    前戏 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的一些交互,我们需要继续学习BOM和DO ...

  9. BOM,DOM,ECMAScripts三者的关系

    一:DOM 文档对象模型(DOM)是表示文档(比如HTML和XML)和访问.操作构成文档的各种元素的应用程序接口(API) DOM是HTML与JavaScript之间沟通的桥梁.   DOM下,HTM ...

随机推荐

  1. CentOS碰到两个问题,顺便解决了下

    1.弹出界面 eth0: RTNETLINK answers: File exists 执行service network restart时报的错误 因为service network start造成 ...

  2. NumberUtils.java

    package com.vcredit.ddcash.batch.util; import java.math.BigDecimal; public class NumberUtils { /** * ...

  3. 手机上的页面转换page slider

    小伙伴们是不是经常在手机上见到“转场"的情况,手机上的页面转换已经不像pc上整体的页面跳转,很多都是利用动画平滑地在页面之间的切换.   那么如何来做页面之间的转换呢?首先要明确的是,所谓的 ...

  4. IOS第18天(1,核心动画layer, 旋转,缩放,平移,边框,剪裁,圆角)

    ****动画效果 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [UIView animateWithDurat ...

  5. token原理

    token原理1.和session有很大关系哦. jsp生成表单时,在表单中插入一个隐藏<input>字段,该字段就是保存在页面端的token字符串,同时把该字符串存入session中.等 ...

  6. GDC2016【For Honor-荣耀战魂】的次世代动画技术

    生成自然丰富,反应灵敏的动作的“Motion Matching”是什么?         Ubisoft在2016年内预定发售的[荣誉战魂],是基于MOBA类集团战斗,并加入了高度紧张的剑斗动作的多人 ...

  7. 导入TDP数据包备份

    package org.alfresco.repo.bom.util; import java.io.BufferedReader; import java.io.File; import java. ...

  8. VS2010 更改C#类库模板

    首先你找到你自己的 VS2010安装目录,例如我本地是: D:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ItemTem ...

  9. Juery On事件的 事件触发流程

    使用On 给控件赋值事件的时候,你有没有觉得很神奇那,那是因为他事件处理流程比较特殊. on()函数并不是为当前jQuery对象匹配的元素绑定事件处理函数,而是为它们的后代元素中符合选择器select ...

  10. 《Linux内核设计与实现》CHAPTER1,2阅读梳理

    <Linux内核设计与实现>CHAPTER1,2阅读梳理 [学习时间:2.5hours] [学习内容:Linux内核简介——历史与现今版本:Linux内核源代码以及编译] CHAPTER1 ...