BOM

1.BOM对象之——navigator——掌握

  navigator对象指代当前的浏览器,可用于获取当前客户端的浏览器及操作系统的信息

  常用属性: 

navigator.cookieEnabled :  boolean,可能为true/false,反应当前浏览器是否启用了Cookie功能。

navigator.userAgent : string, UA(UserAgent),此属性可以反映出当前客户端浏览器的类型

 

常见浏览器的userAgent值:

Chrome

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36

Firefox

Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0

Safari

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2

IE

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)

Opera

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60

 

 

 

 

2BOM对象之——location——掌握

  location对象中包含着当前显示的页面的地址信息

  常用属性:

location.href: string  读取/设置页面的URL地址,注意:设置此属性的值作用相当于页面跳转

  常用方法:

location.assign( url ):修改当前显示的页面URL,即页面跳转

     location.reload( ):重新加载当前URL地址,即刷新当前页面

location.replace( url ):作用类似于页面跳转

 

 

3.BOM对象之——history——掌握

 history对象记录着当前浏览器窗口的URL访问历史

 常用属性:

history.length

 常用方法:

history.back( )     后退到历史记录中的上一页

history.forward( )  前进到历史记录中的下一页

history.go( num )  num是正数,表前进到历史记录中的下n页;num是负数,表后退到历史记录中的上n页

 

 

 

4.BOM对象之——screen——掌握

 

八位色: 

00000000  00000000  00000000

11111111  11111111  11111111

0~255     0~255      0~255

共可以表示2^24    1600 0000种颜色

 

十六位色:

00000000 00000000   00000000 00000000   00000000 00000000  

11111111 11111111   11111111 11111111   11111111 11111111

共可以表示2^48种    256T种颜色

 

screen对象表示当前浏览器所在屏幕(PC屏幕、平板屏幕、手机屏幕)

screen对象常用的属性:

screen.colorDepth   number,返回当前显示器的颜色位深

screen.width                 返回显示器的水平分辨率

screen.height                返回显示器的竖直分辨率

screen.availWidth          返回显示器的水平可用分辨率(除任务栏)

screen.availHight           返回显示器的竖直可用分辨率(除任务栏)

 

 

 

5.BOM对象之——event——难点&重点

  页面中每当发生某种状况时,浏览器就会自动创建一个Event对象——一个页面中可能创建多个Event对象。

两种事件模型:

1995:IE4提出了“IE事件模型”——“冒泡型事件模型”

2003:W3C DOM Lv3提出了“DOM事件模型”——“先捕获再冒泡型事件模型”

这两种事件模型定义了不同的事件对象,不同的属性和方法,甚至底层的理念都是不同的。

 Event Handler(事件处理器/句柄) 、Event Listener(事件监听器),指用于监听并处理事件对象的函数。

http://developer.mozilla.org

 

为事件绑定监听函数的三种方式——重点

(1)直接在HTML中声明事件处理代码

<a onclick="alert(111);alert(222)">

   此方法把JS混在HTML中,把网页的行为混在内容中,不推荐使用!

(2)在脚本中为元素绑定事件处理函数

网页: <a id="">xxx</a>

脚本: document.getElementById('').onclick = function(){   }

  此方法把事件绑定和处理相关代码全部放在脚本中!实现了内容和行为的分离,推荐使用。  但此方法有个缺陷:只能为某个事件绑定一个处理函数!

(3)高级事件绑定方法

    IE事件模型:  element.attachEvent( 'onxxx',  fn );

    DOM事件模型:element.addEventListener( 'xxx', fn, useCapture );

  此方法可以为一个事件绑定多个处理函数!

 

6.IE事件模型和DOM事件模型最本质的区别——事件的生命周期(重点面试题)

  Event对象的生命周期:  创建 =>  成长(在不同的地点)  =>  消亡

  Event对象的传递需要经过三个阶段:

  (1)第一阶段:捕获阶段(Capture Phase),event对象先传给父元素,再传给子元素

  (2)第二阶段:目标触发阶段(Target Phase),event对象最终传递给事件源元素

  (3)第三阶段:冒泡阶段(Bubble Phase),event对象穿给子元素,再传给父元素

  注意:IE事件模型中没有定义“捕获阶段”——冒泡型事件模型。

1.(继续)事件对象的生命周期

  第一阶段:捕获,event对象由父元素向下传递

  第二阶段:目标,event对象在事件源对象上触发

  第三阶段:冒泡,event对象由子元素向上传递

注意:(1)IE事件模型没有捕获阶段,element.attachEvent( 'onxxx', fn )也没有第三个参数。

       (2)element.onxxx = fn  绑定的事件处理函数都是在“冒泡阶段”触发的。

       (3)DOM事件模型中有完整的三个阶段,使用第三个参数useCapture(boolean)来指定“是否绑定在捕获阶段”

element.addEventListener('xx', fn, false) —— 事件监听函数绑定在冒泡阶段

element.addEventListener('xx', fn, true) —— 事件监听函数绑定在捕获阶段

 

 

 

 

2.如何获取event对象?

  IE:   HTML/JS中,可以直接使用event对象,把event看做是window.event属性。

  FF:   HTML中可以使用使用event对象,但JS中不能直接使用该对象。

  兼容性问题解决方法:

  绑定监听函数的方式1:

    HTML:   <a   onclick="f1( event )">

    JS:   function f1( e ){  console.log(e);   }

  绑定监听函数的方式2/3:

    JS:  element.onclick = function( event ){

 console.log( event );

          }

事件对象的常用属性和方法:

  (1)获取事件的源头对象

IE:  event.srcElement

FF:  event.target

兼容性解决方案:  var src = event.srcElement || event.target;

 

  (2)阻止事件的默认行为

事件的默认行为:一个事件触发后,默认要执行的动作。如submit按钮被单击,默认就要提交表单;网页中单击上下左右键,默认就要让内容发生滚动;输入框中击键后默认就会把键盘字符显示在输入框中.......

有些应用中,需要阻止事件的默认行为!

IE:    event.returnValue = false;

DOM:  event.preventDefault( );

保证兼容性的写法:

if( event.preventDefault ){

       event.preventDefault(  );              //DOM

}else{

       event.returnValue = false;           //IE

}

  (3)停止事件的继续传播

IE:  event.cancelBubble = true;           //取消冒泡

DOM:  event.stopPropagation( );        //停止传递/传播

考虑兼容性的写法:

if( event.stopPropagation ){

event.stopPropagation();

}else{

event.cancelBubble = true;

}

  (4)获取事件的发生坐标

 

 

BOM: 七个对象,操作浏览器本身

DOM: N个对象,操作文档内容,分为三部分:

(1)核心DOM:用于操作任意的ML文档

(2)HTML DOM:用于操作HTML文档

(3)XML DOM:用于操作XML文档

 

4.HTML DOM

核心DOM和HTML DOM的关系

 核心DOM只定义几种不同Node对象:属性Node、文本Node、元素Node,但没有定义元素Node又可以细分为哪些;

 HTML DOM定义了100种左右的元素Node——每个HTML标签都对应一个对象,且这些对象预定义了若干的属性,如:

var img = new Image( );

img.src = '1.jpg';

img.title = '';

img.width = '';

img.alt = '';

img.onclick = function(){   }

<img src="" width="" height="" title="" alt="" onclick="">

5.常用的HTML DOM对象

 (1)Image对象    <=>     <img>

 (2)Table对象     <=>     <table border="" width="">

特别的属性:  rows    类数组型属性

特别的方法: 

insertRow( )   为表格对象添加一个tr子对象

              deleteRow( )  从表格对象中删除一个tr子对象

 (3)TableRow对象          <=>              <tr>

特别的属性: 

rowIndex : number,返回当前tr在table中序号

cells:类数组对象,返回当前tr中所有的td集合

特别的方法:

insertCell( )     在tr中的插入一个新的td

deleteCell( )    在tr中删除一个td元素

  (4)TableCell对象     <=>     <td>

  (5)Form对象   <=>    <form action="" method="" enctype="">

特殊的方法:

submit( )        提交表单中的内容

reset( )           重置表单中的内容

<form id="form1" action="user.php">

    <input ...>

    <input type="button"    onclick="if(...){ form1.submit( );}" >

    <input type="button"    onclick="form1.reset( );" >

</form>

  (6)表单中的输入域对象:  Text  Password   Checkbox....

常用的属性:

name

value

常用的方法:

focus( )                 申请获取输入焦点

select( )                 选中输入框中的所有文本

  (7)Select对象              <=>                     <select multiple="true" size="3">

特别的属性:

multiple: boolean,是否允许多选,注意!与HTML中的类型不同!!!!

size:  number,显示出来的选项的数量

value:string,当前选中的option的值

selectedIndex:number,当前选中的option的下标

options:类数组对象,包含所有的option

特别的方法:

add(option)           添加一个新option

remove(index)       删除一个option

  (8)Option对象            <=>                     <option value="">

创建新的Option:   new Option(txt,  value)

new Option('北京', '110');  <=> <option value="110">北京</option>

特别的属性:

index:  

text:                           开始标签和结束标签之间的文本

value:

selected:boolean       读取/设置当前option是否被选中

 

读写元素的属性:

  (1)核心DOM方式——兼容性好

var attr = document.createAttribute('src');

attr.nodeValue = '1.jpg';  //attr.value='';

e.setAttributeNode( attr );

-------------------------------

console.log(e.getAttributeNode( 'src' ).nodeValue);

  (2)核心DOM简写方式——老IE不支持

e.setAttribute('src',  '2.jpg');

-------------------------------

console.log( e.getAttribute('src') );

  (3)HTML DOM方式——网页开发中无兼容性问题

e.src = '3.jpg';

-------------------------------

console.log( e.src );

 

 

补充:Cookie

推荐广告、不再登录、购物车、主题选择....

上述功能的共同点:网站可以记住客户端之前的访问情况!——服务器程序设法保存了客户端的访问数据!

如何保存客户端访问数据:

(1)方式一:Cookie技术——前后台结合技术

(2)方式二:Session技术——纯后台技术

(3)方式三:HTML5本地存储技术

 

Cookie:小点心,甜点

使用js判断客户端浏览器是否禁用了Cookie:

console.log( navigator.cookieEnabled );   //true

 

2.Cookie对象的属性

  (1)expires: string,用于指定Cookie对象的有效期。注意:该属性赋值时必须是标准的GMT时间格式:'Mon, 24 Aug 2015 01:43:41 GMT'

如何获得当前系统时间7天后时间的GMT字符串

    new Date( new Date().getTime()+1000*3600*24*7 ).toGMTString();

  (2)domain: string,指定哪些域名下的页面可以访问当前Cookie对象(默认情况下,一个Cookie对象只运行当前域名下的页面访问)

domain=http://ad.baidu.com

  (3)path: string,指定目标域名下哪个路径下的页面可以访问当前Cookie对象

path=/news/f1/

 

 

3.创建和读取Cookie对象

 创建一个Cookie对象,不能使用new Cookie(),只能使用:

document.cookie = 'key=value' ;

说明:document.cookie可以先后赋值多次!只要每次赋值的key不同,就是创建了多个不同的Cookie对象!若有重复的key,则相当于修改了一个已经存在的Cookie对象的值。

因为document.cookie属性是string类型,所以读取所有的Cookie数据就是一个字符串拆分操作。

注意:因为Cookie一般是服务器让客户端保存的数据,网页必须通过服务器远程访问才能正确读取/设置Cookie对象!Chrome无法读取本地直接打开的网页保存的Cookie!Firefox可以直接读取。

 

 

 

 

posted @ 2015-12-13 15:29  白艳风  阅读(179)  评论(0编辑  收藏  举报