javascript中级笔记

DOM : Document Object Model 文档对象模型

文档:html页面

文档对象:页面中元素

文档对象模型:定义 为了能够让程序(js)去操作页面中的元素

DOM会把文档看作是一棵树,同时定义了很多方法来操作这棵数中的每一个元素(节点)

DOM节点

getElementById

getElementByTagName

document

document.body

元素.childNodes : 只读 属性 子节点列表集合

标准下:包含了文本和元素类型的节点,也会包含非法嵌套的子节点

非标准下:只包含元素类型的节点,ie7以下不会包含非法嵌套子节点

childNodes只包含一级子节点,不包含后辈孙级以下的节点

DOM节点的类型有很多种 12种

元素.nodeType : 只读 属性 当前元素的节点类型

元素节点 : 1

属性节点 : 2

文本节点 : 3

childNodes问题很多建议使用children

元素.children : 只读 属性 子节点列表集合

标准下:只包含元素类型的节点(不包含文本节点了)

非标准下:只包含元素类型的节点

for (var i=0; i<oUl.children.length; i++) {

oUl.children[i].style.background = ‘red‘;

}

元素.firstChild : 只读 属性 第一个子节点

标准下:firstChild会包含文本类型的节点

非标准下:只包含元素节点

元素

var oFirst = oUl.firstElementChild || oUl.firstChild;

oFirst.style.background = ‘red’;

//在不支持firstElementChild的时候它返回null,后面返回textNode,所以会报错。

正确的使用方法如下:

if ( oUl.children[0] ) {

oUl.children[0].style.background = ‘red‘;

} else {

alert( ‘没有子节点可以设置‘ );

}

元素.lastChild || 元素.lastElementChild 最后一个子节点

元素.nextSibling || 元素.nextElementSibling 下一个兄弟节点

元素.previousSibling || 元素.previousElementSibling 上一个兄弟节点

元素.parentNode : 只读 属性 当前节点的父级节点 没有兼容性问题

元素.offsetParent : 只读 属性 离当前元素最近的一个有定位属性的父节点

如果没有定位父级,默认是body

ie7以下,如果当前元素没有定位默认是body,如果有定位则是html

ie7以下,如果当前元素的某个父级触发了layout,那么offsetParent就会被指向到这个触发了layout特性的父节点上

元素.offsetLeft[Top] : 只读 属性 当前元素到定位父级的距离(偏移值)

到当前元素的offsetParent的距离

如果没有定位父级

offsetParent -> body

offsetLeft -> html

如果有定位父级

ie7以下:如果自己没有定位,那么offsetLeft[Top]是到body的距离

如果自己有定位,那么就是到定位父级的距离

其他:到定位父级的距离

<div id="div1" style="width: 100px; height: 100px; border: 1px solid red; padding: 10px; margin: 10px;"></div>

alert( oDiv.style.width ); //100

alert( oDiv.clientWidth ); //样式宽 + padding 120

alert( oDiv.offsetWidth ); //样式宽 + padding + border  可视区宽 + 边框 122

创建元素:

/*

document.createElement(标签名称); 创建元素

*/

var oLi = document.createElement(‘li‘);

//oLi.innerHTML = oText.value + ‘<a href="javascript:;">删除</a>‘;

oLi.innerHTML = oText.value;

var oA = document.createElement(‘a‘);

oA.innerHTML = ‘删除‘;

oA.href = ‘javascript:;‘;

oA.onclick = function() {

/*

父级.removeChild(要删除的元素); 删除元素

*/

oUl.removeChild( this.parentNode );

}

oLi.appendChild( oA );

//添加到页面中

/*

父级.appendChild(要添加的元素) 方法 追加子元素

*/

//oUl.appendChild( oLi );

/*

父级.insertBefore(新的元素,被插入的元素) 方法 在指定元素前面插入一个新元素

在ie下如果第二个参数的节点不存在,会报错

在其他标准浏览器下如果第二个参数的节点不存在,则会以appendChild的形式进行添加

*/

//oUl.insertBefore( oLi, oUl.children[0] );

if ( oUl.children[0] ) {

oUl.insertBefore( oLi, oUl.children[0] );

} else {

oUl.appendChild( oLi );

}

元素的替换

/*

父级.replaceChild(新节点,被替换节点) 替换子节点

*/

//document.body.replaceChild( oDiv, oP );

/*

appendChild,insertBefore,replaceChild都可以操作动态创建出来的节点,也可以操作已有节点

*/

//oP.appendChild( oDiv );

获取所有节点

document.getElementsByTagName(‘*’);

表单元素:

<form id="form1">

<input type="text" id="text1" name="username" value="" />

</form>

var oForm = document.getElementById(‘form1’);

获取表单中一个元素  表单.元素name

alert( oForm.username.value );

table里面会默认有一个tbody

获取第二个tr里的第二个元素的写法:

oTab.children[0].children[1].children[1].innerHTML;

tHead : 表格头

tBodies : 表格正文

tFoot : 表格尾

rows : 行

cells : 列

oTab.tBodies[0].rows[1].cells[1].innerHTML;

BOM : Browser Object Model 浏览器对象模型

//open(地址默认是空白页面,打开方式默认新窗口) 打开一个新窗口
//window.open(‘http://www.baidu.com‘, ‘_self‘);

opener = window.open();//返回值 返回的新开页面的window对象

//alert(opener == window)

//opener.document.body.style.background = ‘red‘;

window.close();    关闭窗口

ff : 无法关闭    chrome : 直接关闭     ie : 询问用户

//window.navigator.userAgent : 浏览器信息

//alert( window.navigator.userAgent )

if ( window.navigator.userAgent.indexOf(‘MSIE‘) != -1 ) {

alert(‘我是ie‘);

} else {

alert(‘我不是ie‘);

}

window.location.href = window.location内容

window.location.search = url?后面的内容

window.location.hash = url#后面的内容

//可视区尺寸

//alert( document.documentElement.clientHeight );

//滚动距离

//alert( document.documentElement.scrollTop );    可视区域到顶部的距离

//alert( document.body.scrollTop );

//document.documentElement.scrollTop = 100

//var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;    这样做才兼容

//alert(scrollTop)

var oDiv = document.getElementById(‘div1‘);

//scrollHeight : 内容实际宽高

//offsetHeight

//alert( document.body.offsetHeight );

//ie : 如果内容没有可视区高,那么文档高就是可视区

//alert( document.documentElement.offsetHeight );

alert( document.body.offsetHeight );

//onscroll : 当滚动条滚动的时候触发

var i = 0;

window.onscroll = function() {

document.title = i++;

}

//onresize : 当窗口大小发生变化的时候触发

window.onresize = function() {

document.title = i++;

}

事件:

焦点 : 使浏览器能够区分用户输入的对象,当一个元素有焦点的时候,那么他就可以接收用户的输入。

我们可以通过一些方式给元素设置焦点

1.点击

2.tab

3.js

不是所有元素都能够接收焦点的.能够响应用户操作的元素才有焦点

onfocus : 当元素获取到焦点的时候触发

oText.onfocus = function()

onblur : 当元素失去焦点的时候触发

oText.onblur = function()

obj.focus() 给指定的元素设置焦点

obj.blur() 取消指定元素的焦点

obj.select() 选择指定元素里面的文本内容    选中的是用户输入的内容,div里的内容不行

event : 事件对象 , 当一个事件发生的时候,和当前这个对象发生的这个事件有关的一些详细的信息都会被临时保存到一个指定地方-event对象,供我们在需要的调用。飞机-黑匣子

事件对象必须在一个事件调用的函数里面使用才有内容

事件函数:事件调用的函数,一个函数是不是事件函数,不在定义的决定,而是取决于这个调用的时候

兼容

ie/chrome : event是一个内置全局对象  ff下面是没有这个对象的 var ev = ev || event;

标准下 : 事件对象是通过事件函数的第一个参数传入

如果一个函数是被事件调用的那么,这个函数定义的第一个参数就是事件对象

clientX[Y] : 当一个事件发生的时候,鼠标到页面可视区的距离

*/

//alert( event ); //这里没有事件

/*document.onclick = function() {

alert(event);

};*/

function fn1(ev) {

//alert( event );

//alert( ev );

var ev = ev || event;

//alert(ev);

/*for ( var attr in ev ) {

console.log( attr + ‘ = ‘ + ev[attr] );

}*/

alert(ev.clientX);

}

//fn1(); //不是事件调用的函数

document.onclick = fn1; //是事件调用的函数,所以event有内容

//onmousemove : 当鼠标在一个元素上面移动的触发

//触发频率不是像素,而是间隔时间,在一个指定时间内(很短),如果鼠标的位置和上一次的位置发生了变化,那么就会触发一次

var oDiv = document.getElementById(‘div1‘);

document.onmousemove = function(ev) {

//document.title = i++;

var ev = ev || event;

var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;

oDiv.style.left = ev.clientX + ‘px‘;

oDiv.style.top = ev.clientY + scrollTop + ‘px‘;

}

时间: 2024-10-13 02:40:19

javascript中级笔记的相关文章

Javascript读书笔记:函数定义和函数调用

定义函数 使用function关键字来定义函数,分为两种形式: 声明式函数定义: function add(m,n) { alert(m+n); } 这种方式等同于构造一个Function类的实例的方式: var add = new Function("m", "n", "alert(m+n);"); Function类构造方法的最后一个参数为函数体:"alert(m+n);",前面的都是函数的形参,参数必须是字符串形式的:&

Javascript 学习笔记 2: 标识语句

可以在任何语句声明之前使用唯一标识(identifier)和冒号(:)用来标记该语句: identifier: statement 这样,你可以在程序的任何其他地方通过标识来使用这个语句.即使在语句内部也可以使用该语句的标识(例如:循环语句和条件语句).当在一个循环语句前添加一个标识,你可以在语句内部通过break 标识来退出当前循环,也可以通过continue标识来继续执行该语句.例如: mainloop: while(token != null) { // Code omitted... c

javascript学习笔记---ECMAScript-判断变量类型

判断类型之前,先要清楚有哪些类型. (理理思路:程序由数据和方法构成,数据由简单数据和复杂数据构成) 即类型有: 数据(简单数据:boolean,string,num,undefined,null.复杂数据:object), 方法(function) 万能的typeof,神一样的方法 typeof(1);// num typeof("hello");// string   typeof(false);// boolean var vFlag; typeof(vFlag);// unde

软考中级笔记

9大管理总复习 5大过程组 范围管理 1)      范围管理的过程和各自的工具是什么? 2)     产品范围包含(产品规格),( 性能技术指标)的描述. 3)     项目范围是否完成以什么为衡量标准. 以项目管理计划,项目范围说明书,WBS,以及WBS字典作为衡量标准. 要基于项目管理计划来度量 4)     WBS的表示形式是什么?各有什么优缺点? 树型和列表形式. 优点 缺点 树型 层次清晰,非常直观,结构性强 不容易修改,对于大的复杂的项目很难表示出项目的全景.一般应用在中小型项目中

javascript进阶笔记(2)

js是一门函数式语言,因为js的强大威力依赖于是否将其作为函数式语言进行使用.在js中,我们通常要大量使用函数式编程风格.函数式编程专注于:少而精.通常无副作用.将函数作为程序代码的基础构件块. 在函数式编程中,有一种函数称为匿名函数,也就是没有名称的函数,是js中的一个非常重要的概念.通常匿名函数的使用情况是,创建一个供以后使用的函数.比如将匿名函数保存在一个变量里面,或将其作为一个对象方法,更有甚者将其作为一个回调等等之类的. //保存在变量中,通过fn去引用 var fn=function

javascript学习笔记---ECMAScript语法(引用类型)

引用类型通常叫做类(class). 本教程会讨论大量的 ECMAScript 预定义引用类型. 引用类型 引用类型通常叫做类(class),也就是说,遇到引用值,所处理的就是对象. 本教程会讨论大量的 ECMAScript 预定义引用类型. 从现在起,将重点讨论与已经讨论过的原始类型紧密相关的引用类型. 注意:从传统意义上来说,ECMAScript 并不真正具有类.事实上,除了说明不存在类,在 ECMA-262 中根本没有出现"类"这个词.ECMAScript 定义了"对象定

javascript学习笔记---ECMAScriptECMAScript 对象----定义类或对象

使用预定义对象只是面向对象语言的能力的一部分,它真正强大之处在于能够创建自己专用的类和对象. ECMAScript 拥有很多创建对象或类的方法. 原始的方式 因为对象的属性可以在对象创建后动态定义(后绑定),类似下面的代码: var oCar = new Object; oCar.color = "blue"; oCar.doors = 4; oCar.mpg = 25; oCar.showColor = function() { alert(this.color); };不过这里有一

Javascript 事件 笔记 1

HTML 事件处理程序: 缺点:html 和 js 耦合性太高 (如果改动方法名 那么就要改HTML 代码和JS代码 ) 优点: 兼容性强 1 <input type="button" id="btn1" value="btn1" onclick="alert(this.value)"> Dome 0 级事件处理程序: 把函数赋值给一个事件的属性. 简单,跨浏览器 1 var btn2 = document.get

javascript学习笔记---ECMAScriptECMAScript 对象----修改对象

通过使用 ECMAScript,不仅可以创建对象,还可以修改已有对象的行为. prototype 属性不仅可以定义构造函数的属性和方法,还可以为本地对象添加属性和方法. 创建新方法 通过已有的方法创建新方法Number.prototype.toHexString = function() { return this.toString(16); }; 在此环境中,关键字 this 指向 Number 的实例,因此可完全访问 Number 的所有方法.有了这段代码,可实现下面的操作: var iNu