dom4


1. window经常使用子对象:
history: window对象中保存当前窗体访问过的url的历史记录栈
history.go(1): 前进1次
go(-1): 后退1次
go(0): 刷新当前页
go(n): 前进/后退n次javascript

location:当前窗口正在打开的url地址对象
location.search:得到url中的查询字符串
若是进一步得到参数名和参数值?
先按&分隔,再按=分隔
location.replace("新url"): 在当前窗口打开新连接
不可后退
(history中旧url被新url替换了)php

使用location在当前窗口打开新连接,可后退:2种:
location.href="新url";
location.assign("新url");

刷新:location.reload();html

screen: 封装当前屏幕的显示信息
screen.height/width: 完成屏幕宽高
availHeight/Width: 去掉任务栏后的剩余宽高
window7下任务栏透明java

2. ***事件:
浏览器自动触发的或用户手动触发的对象状态的改变
DOM Level2 Event标准
IE8:自成体系!
事件处理函数:当事件触发时,自动执行的函数
好比:<button onclick="函数/js语句"></button>
//btn.onclick();面试

事件处理:
1. 事件定义(绑定事件处理函数):3种
html: <标签 on事件名="fun()">
d1.onclick=function(){
eval("fun()");
//[window.]fun();
}
强调:fun()中this-->window
若是得到当前目标元素对象:
html: onxxx="fun(this)"
js中定义函数时:fun(elem)数组


js: elem.on事件名=函数对象;
一个元素的一个事件处理函数,只能绑定一个函数对象
DOM标准:elem.addEventListener(
"事件名",函数对象,是否在捕获阶段触发)
true/false
一个元素的一个事件处理函数,可add多个不一样函数对象IE8: elem.attachEvent("on事件名",函数对象)
实际执行的:elem.on事件名(); this-->elem
2. ***事件周期:从浏览器捕获到事件后,一直到最后一个事件触发完,经历的过程。
DOM标准:3个阶段:
1. (由外向内)捕获:从最外层html元素开始,向内逐层记录每层元素绑定的事件处理函数。到目标元素为止
2. 目标触发:自动执行目标元素上绑定的事件处理函数
3. (由内向外)事件冒泡:从目标元素的父元素开始,逐层向上执行每层的事件处理函数,到最外层html结束。
IE8的事件周期:2个阶段:没有捕获浏览器

3. event对象:
当事件发生时,自动建立,封装了事件信息
好比:keyCode
screenX/Y
得到event对象:
html: onclick="fun(event)"
实际调用时: event会自动得到当前事件对象
fun(e){
e中得到的就是事件对象
}函数

js:elem.onxxxx=fun;
fun(){
//DOM标准:自动建立event对象,默认以第一个参数传入!
//IE8:window全局的event属性,
当事件发生时,也会自动建立event对象,
但会保存在window.event中
}
event对象中包含:
1. 目标元素对象:var src=e.srcElement||e.target
2. ***取消/利用冒泡:
取消:DOM标准:e.stopPropagation()
IE8:e.cancelBubble=true;
通常用在当前事件处理函数执行结尾
***优化:若是多个子元素中定义了相同的事件处理函数
其实,只须要在共同的父元素上定义一次便可!
3. *取消事件:
if(e.preventDefault){
e.preventDefault(); //--DOM
}else{
e.returnValue=false; //--IE8
}
什么时候取消:好比:表单提交前,若是验证未经过,
则取消以后的自动提交

事件坐标:3种坐标系
1. 相对于显示器:
最大值: screen.availHeight/availWidth
鼠标位置: e.screenX/Y
2. 相对于文档显示区
最大值:window.innerHeight/Width
鼠标位置:e.clientX/x; e.clientY/y
3. 相对于父元素左上角
最大值:父元素的宽和高
鼠标位置:e.offsetX/Y 优化

页面滚动this

 

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) —— 事件监听函数绑定在捕获阶段

 

 

 

思考:DOM事件模型为何添加一个捕获阶段??

 

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="">

练习:使用HTML DOM属性访问方式来获取和修改下述超连接的全部属性值

<a class="title" href="javascript:void(0)" target="_blank" onclick="open()">标题1</a>

 

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是否被选中

练习:有以下的数据:

var data = [

{id: 110,  pname: '北京市'},

{id: 210,  pname: '天津市'},

{id: 310,  pname: '上海市'}

];

把上述数据盛放到一个select中,并让最后一个选项默认选中

 

 

四个阶段的重点

(1)JS

(2)DOM操做

(3)jQuery

(4)AJAX

 

 

 

 

 

 

 

 

挑战性做业:

(1)完成计算器的加减乘除功能。

(2)无限级联下拉菜单

相关文章
相关标签/搜索