JS高级程序设置笔记(三)

8:BOM(浏览器对象模型)

BOM的核心是window,它是一个浏览器的实例

在浏览器中,window具有双重角色,它既是用过JS访问浏览器的一个接口,又是EMCA规定的Global对象。

定义全局变量和定义在window上的属性还是有区别的;

全局变量是不能直接使用delete删除(通过var创建的属性有个一个ConfigureAble特性,他的默认值是false所以不能直接删除)

定义在window对象上的属性是可以直接用delete删除的。

var num=10;//定义的全局变量的属性window.num2=12;//在window下创建的属性delete num;delete window.num2;console.log(num);console.log(window.num2);结果:

8.1.2窗口关系及框架:

如果页面中包含框架,则每个框架都会保存在frames集合中,可以通过索引值来访问相应的框架Frame(框架)

可以通过页面结构来访问相印的框架

8.1.3窗口位置

确定window的位置属性值得方法是:screenLeft 和screentop 分别指上方的左侧。firefox也支持screenX和screenY属性来提供window对象的位置属性。

使用moveTo()和moveBy()方法可以将窗口移动到一个新的位置都接受两个值:

moveTo()接受的两个值是x和y坐标的值而moveBy()接收的是水平方向和垂直方向上移动的像素值。

window.moveTo(200,300);window.moveBy(100,200);

8.1.4 窗口大小:

确定一个窗口的大小:提供了四个属性:innerWidth innerHeight outWidth outHeight.在IE9+ safair 和firefox中,outerWidth和outerHeigth返回浏览器窗口本身的尺寸

var height = document.documentElement.clientHeight;document.write(height);var width = document.documentElement.clientWidthdocument.write(" "+width);
获取页面视口的大小
在IE6中,标准模式对着些方法来说才能使用,在混杂模式下只能通过
document.body.clientHeight;document.body.clientLeft;
来获取

对于移动设备,window.innerWidth 和 document.innerHeight 保存着可视视口

通过resizeTo()和resizeBy()方法可以调整浏览器的大小。都接受两个参数

resizeTo()接受浏览器的新宽度和新高度,

resizeBy()接受新窗口和旧窗口的宽度只差和高度只差。

8.1.5导航和打开窗口

window.open();方法可以导航到一个新的窗口

可以接收四个参数:要加载的URL 窗口目标 一个特性字符串以及一个表示新页面是否取代旧页面的boolean值

通常只传递一个参数

第二个参数:窗口目标,如果没有窗口目标就可以使用下列的任意一个数:_self _paretn _top _blank。

第三个参数

弹出窗口屏蔽程序:

var blocked=false;try{var wroxWin=window.open("http://www.wrox.com","_blank");    } catch (ex){blocked=true;    }if(blocked){alert("The popup was blocked!");    }

8.1.6间歇调用和超时调用

超时调用:

setTimeout()计时器,在载入后延迟指定时间后,去执行一次表达式,仅执行一次。

语法:

setTimeout(代码,延迟时间);
建议调用方式

setTimeout(function(){alert("Hello World");},3000);

setTimeout()和clearTimeout()一起使用,停止计时器。

语法:

clearTimeout(id_of_setTimeout)

var timer=setTimeout(function(){alert("Hello World");},3000);clearTimeout(timer);

间歇调用:

setInterval(function(){alert("Hello World");},1000);

故名思议就是过一段时间就调用一次

系统对话框:

浏览器有三种形式的对话框

alert(),confirm(),prompt(),

第一种:

alert("are you sure");
在浏览器中的现实效果

第二种:

confirm():它返回的是一个boolean值类型,点击确认按钮返回true 点击取消就返回false

if(confirm("are you sure!")){alert("you click sure");}else{alert("you click False");}

第三种:prompt()方法,

里面包含得了两个参数

prompt(str1,str2);

str1的值是不能修改的,str2的值是用来提示用户的,可以修改,当你点击确定,返回值是str2的值。如果点击取消返回一个null值。

8.2location对象:提供了当前页面中加载的文档有关信息,还提供了一些导航的功能。

location用于获取或设置窗体的URL,并且可以用于解析URL。

语法:

location.[属性|方法]

location 对象方法

解析当前的URL

var url=document.location.href;

document.write(url);

8.2.2位置操作:

使用location对象可以通过很多方式来改变浏览器的位置,最常用的就是:assign()方法并为其传递一个URL

assign()和window.location();达到的效果一样;

我们可以通过调用location.replace()方法来禁用返回前一页面的功能。

location。reload(true);//重新加载(从服务器重新加载)

location.replace();//重新加载(有可能从服务器中加载)

8.3navigator对象

Navigator 对象包含有关浏览器的信息,通常用于检测浏览器与操作系统的版本。

判断当前所用的浏览器型号信息

function validB(){

var u_agent =navigator.userAgent;

var B_name="不是想用的主流浏览器!";

if(u_agent.indexOf("Firefox")>-1){

B_name="Firefox";

}else if(u_agent.indexOf("Chrome")>-1){

B_name="Chrome";

}else if(u_agent.indexOf("MSIE")>-1&&u_agent.indexOf("Trident")>-1){

B_name="IE(8-10)";

}

document.write("浏览器:"+B_name+"<br>");

document.write("u_agent:"+u_agent+"<br>");

}

8.3.1检测插件:

对于非IE浏览器,可以使用plugins数组来达到这个目的。

function hasPlugin(name){    name=name.toLowerCase();//转换小写for(var i=0;i<navigator.plugins.length;i++){if(navigator.plugins[i].name.toLowerCase().indexOf(name)>-1){return true;        }    }return false;}

这个hasplugin()接受一个参数:要检测的插件名。

//检测IE中的插件function hasIEPlugin(name){try{new ActiveXObject(name);return true;    }catch(ex){return false;    }}

8.4 screen对象:

screen对象

screen对象用于获取用户的屏幕信息。

语法:

window.screen.属性

8.5 history对象

保存着用户的上网历史记录。

//前进一页

history.go(1)

//后退一页

history.go(-1)

//前进两页

history.go(2)

back()和forward()方法用来前进和后退

history.back();

history.forwward();

第十章:DOM

DOM(文档对象模型)

文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法。DOM 将HTML文档呈现为带有元素、属性和文本的树结构(节点树)。

将HTML代码分解为DOM节点层次图:

1:nodeName和nodeValue

要了解节点的具体类型,可以使用者两个属性,分别返回的值是,节点的名称和节点的值。

nodeType:节点属性

元素:1

属性:2

文本:3

注释:8

文档:9

2:节点关系:

每个节点都有一个childNodes属性,其中保存着一个NodeList对象。它是一种类数组对象,用于保存一组有序的节点,可以通过位置来访问这些节点。NodeList对象也有length属性,但是他不是Array的实例。

下面的例子展示了如何访问保存在nodeList中的节点——可以通过方括号,可以使用item()方法。

遍历节点树:

var firstChile=someNode.childNodes()[0];

var secondChild=someNode.childNodes.item(1);

var count=someNode.childNodes.length;

3操作节点:

appendChild(),在childNode列表的末尾添加一个节点。

insertBefore()接受两个参数,要插入的节点和需要参照的节点。

replaceChild()接受两个参数,要插入的值和要取代的值。

如果只想删除某个节点的话就可以使用

removechild();

这几个方法操作的都是子节点,所以必须先得到父节点(parentNode)。

4:其他方法:

cloneNode(),用于创建调用这个方法的节点的一个完全相同的副本。cloneNode接收一个boolean值类型的参数值

参数是true:执行深复制,复制整个节点和子节点树;

参数是false:执行浅节点,复制完的节点属于文档所有,单并没有给他指定父节点。除非使用上述添加节点的方法将它添加到父节点中。

normalize()处理文档树中的文本节点;

10.1.2 Document类型

document对象是HTMLDocument的一个实例,表示整个HTML页面。而且document是window对象中的一个属性,因此可以将其作为全局对象来访问。Document节点具有以下特征:

nodetype:9

nodeName:"#document";

nodeValue:null

parentNode:null

ownerDocument:null

其子节点可能是一个DocumentType、Element、processingInstruction或Comment;

1:文档的子节点:

访问其子节点的快捷方式:documentElement属性该属性始终指向HTML页面中的<html>元素。

另一个就是通过childNodes列表访问文档元素。但是通过前者更加快捷

var html = document.documentElement;//取得对<html>的引用

作为HTML的实例对象还有一个body属性,直接指向<body>元素

var body=document.body;//取得对<body>的应用

2:文档信息:

设置文档的标题:

document.title="demo";

获取文档的标题

var title=document.title;console.log(title);

三个关于网页请求的属性:

//取得完整的URL

var url =document.URL

//取得域名

var domain=document.domain;

//取得来源页面的URL

var referrer=document.referrer;

在这三个属性中,只有domain是可以设置的。

3:查找元素:

取得元素的操作可以使用document对象的几个方法来完成。其中,Document类型提供了两个方法:

getElementById()和getElementByTagName();

getElementById():通过ID名来获取相应的元素;

getElementByTagName()接受一个参数,就是你要获取的元素的名称

还有一个方法叫做,nameItem();可以通过元素的name特性取得集合中的项。

想要获取全部元素可以向getElementByTagName()中添加一个*,

第三个方法用样也是对文档类型对象

getElementByName();通过name属性来获取元素;

4:特殊集合

除了属性和方法,document对象还有一些特殊的集合。这些集合都是HTMLCollection对象,为访问文档常用的部分提供了快捷方式,包括:

document.anchors:包含文档中所有包含name特性的<a>标签

document.applets:不再使用了,获得所有appletes元素标签

document.forms:获取所有<form>元素

document.images:包含所有文档中的<img>元素

document.links:获取文档中所有带href特性的a标签。

5:DOM一致性

由于DOM分为多个级别,也包含了多个部分,所以就需要来检测

利用document.implementation属性的hasFeature()方法来进行检测

这个方法接收两个参数,一个是DOM功能的名称和版本号,如果支持就返回true 不支持就返回false

6:文档写入:

重要功能就是将输出流写入到页面中的能力。这个能力体现在以下的四个方法中

write()和writeln():

都接受一个参数,即要写入到页面中的值,write()会原样写入,writeln()方法则会在字符串最后加一个换行符

例子:

document.write("<strong>"+new Date().toString()+"</strong>")

open()和close()分别用于打开和关闭网页的输出流。如果是在页面加载期间使用write()或者writeln()方法则不需要使用这两种方法:

10.1.3Element类型:Element节点具有以下特征

nodetype:1

nodeName:的值为元素的标签名;

nodeValue:null

parentNode:可能是document或者Element

其子节点可能是Element、Text、Comment、ProcessingInstruction、CDATASection或者EntntyReference。

要访问元素的标签名可以使用nodeName或者tagName属性

var element=document.getElementById("myiD");console.log(element.tagName);console.log(element.tagName.toLowerCase()=="div");

1:HTML元素:

id:元素在文档中的唯一标识符

title:有关元素的附加说明,一般通过工具提示条显示出来

lang:元素内容的语言代码,很少使用

dir:语言方向很少使用

className:通过元素的class特性来对应

上述这些属性都可以用来取得或修改相应的特性值。

<div id="myiD" title="123" lang="en" dri="ltr" class="myid">IS a div element</div>

可以先通过document.getElementById("myiD");方法或者其他方法来得到元素,在使用.属性。来获取或者修改元素的特性值

2:取得特性(属性):

通过getAttribute();来获取元素内部的属性;

如:

var element=document.getElementById("myiD");var name=element.getAttribute("title");console.log(name);

3:设置特性:

通过获得元素,然后通过getAttribute()方法来获取内部的属性值、

有获得当然就有修改和删除:

修改:setAttribute();获取两个string类型的参数,一个是你要修改的属性值,一个是替换的值

删除:removeAttribute();彻底删除这个属性。

4:attributes属性

attribute属性是一个DOM节点类型属性。attribute属性中包含一个NameNodeMap,与Nodelist类似,也是是一个动态集合,元素的每一个特性都由一个attr节点表示,

NameNodeMap对象拥有下列方法。

getNamedItem(name):返回nodeName属性等于name的节点

removeNameItem(name):从列表中移除nodeName属性。

setNameItem(node):向列表中添加节点

Item(pos);返回数字pos位置处的节点;

attribute具有一系列的节点,nodeName就是元素内属性(特性)的name nodeValue就是该属性(特性)的值;

想获得id元素的特性

5:创建元素:

通过 document.creatElement("element");

接收一个参数,要创建的标签名

6:元素的子节点:

childNodes属性包含了所有子节点的信息

var getElement=document.getElementById("menu");for(var i= 0,len=getElement.childNodes.length;i<len;i++){if(getElement.childNodes[i]==1){//执行操作}}

10.1.4 Text类型:

对纯文本的操作,就是元素标签之间的值;

var one=document.getElementById("newOne");one.innerHTML="thi";

向空标签之间添加内容;

可以通过nodeValue属性或者data属性访问text节点中包含的文本,下列方法可以操作节点中的文本。

appendDate(text):将text添加到节点的末尾;

deleteDate(offset,count):从offset指定的位置开始删除count个字符;

insertData(offset,text):在offset的位置添加text

replaceData(offset,count,text)替换

splitText(offset)分割

substringData(offset,count):提取

var one=document.getElementById("newOne");var text =document.createTextNode("hello word")one.appendChild(text);

2规范化文本节点:

normalize()

3:分割文本节点:

splitText(offset)分割 从offset的位置开始分割;

10.1.5 comment类型

获取注释的值;

10.1.6 CDATASection类型

只针对XML文档,表示CDATASction区域

10.1.7 DocumentType类型

主要包含着doctype的相关信息

10.1.8 DocumentFragment类型:

一种轻量级文档,可以包含控制节点,但不会想完整的文档那样去占用内存。

10.1.9 attr类型:

attr就是attribute()的子节点:操作属性最常用到的就是getAttribute(),setAttribute(),和removeAttribute(),操作属性的。

attr有三个属性:name,value和specified

时间: 2024-10-16 01:10:23

JS高级程序设置笔记(三)的相关文章

JS高级程序设置笔记(六)

22.1.2 作用域安全的构造函数 作用域安全的构造函数在进行任何更改前,首先确认this 对象是正确类型的实例.如果不是,那 么会创建新的实例并返回. 多个程序员在同一个页面上写JavaScript 代码的环境中,作用域安全构造函数就很有用了.届时, 对全局对象意外的更改可能会导致一些常常难以追踪的错误.除非你单纯基于构造函数窃取来实现继 承,推荐作用域安全的构造函数作为最佳实践. 22.1.3 惰性载入函数 惰性载入表示函数执行的分支仅会发生一次.有两种实现惰性载入的方式,第一种就是在函数被

JS高级程序设置笔记(五)

13章:事件 JavaScript与Html之间的交互,是通过事件实现的.可以使用侦听器(或者处理程序)来预定事件. 13.1事件流: 什么是事件流:事件流描述的是从页面中接收事件的顺序. 13.1.1事件冒泡 什么是事件冒泡:可以用一个形象的比喻来描述.小鱼吐泡泡,小鱼在水里,泡泡会从水的最底部一直到水面上结束.事件冒泡和这个意思相近,IE的事件流叫做事件冒泡,是从最具体的元素开始,一直延伸到最顶层的那个结构.意思就是说,比如你创建了一个鼠标点击事件,当你点击这个元素的时候,浏览器会认为你点击

JS高级程序设置笔记(二)

5.4 RegExp类型 用这个类来表示正则表达式. var expression = /pattern/flags; pattern部分是任何简单的或者复杂的正则:每一个正则都有一个或者多个标志. 正则表达式匹配模式下支持下列3个标示 1:g 全局模式 2:i 不区分大小写 3:m 表示多行 5.4.1RegExp实例属性: 1:global:布尔值,表示是否设置了g标志. 2:ignoreCase:布尔值:表示是否设置了i标志 3:lastIndex:整数,表示开始搜索下一个匹配的字符位置,

JS高级程序设置笔记(一)

第一章   1.1 ECMA:欧洲计算机制造商会 ISO/IEC:国标标准话组织和国际电工委员会 1.2JavaScript实现 一个完整的JavaScript实现应该由以下三个不同的部分组成 (1)核心(ECMAScript) (2)文档对象模型(DOM) (3)浏览器对象模型(BOM) 1.2.1 ECMAScript 组成部分:语法.类型.语句.关键字.保留字.操作符.对象. 1.2.2 文档对象模型(DOM) 文档对象模型是针对XML但经过拓展用于HTML的应用程序编程接口(API Ap

JS高级程序设置笔记(四)

11.DOM拓展 11.1选择符API: SelectorsAPI的核心两个方法,:querySelector()和querySlelctorAll(),在兼容的浏览器中,可以通过Domcument及Element类型的实例可以调用他们. 11.1.1 querySelector()方法: querySelector()方法接收一个css选择符,返回与该匹配的第一个元素,如果没有匹配到就返回null. 通过document调用querySelector()方法会在文档元素的范围内查找到匹配的元素

js高级程序设计(第三版)学习笔记(第一版)

ecma:欧洲计算机制造商协会iso/iec:国际标准化和国际电工委员会 dom级别(10*)文档对象模型1:DOM核心(映射基于xml文档)与dom html(在dom核心基础上)2:对鼠标,事件,范围,遍历,还有对css样式表的支持dom2:新接口...视图,事件(鼠标,移动),样式(css),遍历与范围(对文档树的操作)3:对文档加载和保存,验证模块,对核心进行扩展,对xml.0规范其他domsvg可伸缩矢量图mathml数学标记语言mghi同步多媒体集成语言ie5 dom1mozilla

JS高级程序设计学习笔记之第三章基本概念(语法,数据类型,流控制语句,函数)——查漏补缺

一.语法: 区分大小写 2.标识符:就是指变量.函数.属性的名字,或者函数的参数 a.标志符的规则:①第一个字符必须是一个字母.下划线(_)或一个美元符号($).                   ②其他字符可以是字母,下划线,美元符号或者数字. b.标志符采用驼峰大小写格式. c.严格模式:在顶部添加以下代码:"use strict"; d.语句:结尾加入分号.在控制语句中使用代码块为最佳实践. 二.关键字与保留字 三.变量:ECMAScript的变量是松散类型,可以保存任何类型的

《javascript高级程序设计》笔记三

第三章 基本概念 任何语言的核心必然会描述这门语言最基本的工作原理.这部分内容对我们来说,读起来很乏味,甚至会产生困意,但这部分内容却是重要的!我有幸拜读<JavaScript高级程序设计>,更具我自己工作中体会,下面列出一些注意点和有用的东西(⊙o⊙)- ①命名规则.推荐采用驼峰命名.比如:userName. ②块级注释. 1 /* 2 * 推荐块级注释,这里对代码进行注释说明! 3 */ ③JavaScript中采用严格模式.在严格模式下,ECMAScript3中的一些不确定的行为将得到处

JS高级程序设计学习笔记之JS事件(1)

事件流 冒泡 定义:事件开始时由最具体的元素接收,然后逐级上传到较为不具体的节点.(IE9.FF.Chrome.Safari会将事件一直冒泡到window对象.IE5.5及其以下会跳过<html>元素,直接从body跳到document).若发生事件的节点元素并没有绑定该事件,则这个动作会向上冒泡,直到被执行,一直冒泡到window对象. 阻止冒泡:①使用stoppropagation() ②在函数中进行一次判断,if(event.target==event.current.target){f