《JavaScript高级语言设计》(第三版)学习笔记(4)

BOM对象和DOM对象

BOM
window对象

BOM的核心对象是window,他表示浏览器的一个实例
他即使通过js访问浏览器的一个窗口又是ESCMAScript规定的Global对象语句添加的window
全局变量不能通过delete操作符删除,而直接在window对象上定义的属性可以
使用var语句添加的window属性有一个名为[[Configurable]]的特性,这个特性值被设置为false

窗口及框架关系

如果页面中包含框架,则每个框架都有自己的window对象,并且保存在frames集合中。在frames集合中,可以通过数值索引,从0开始,从左到右,从上到下,或者框架名称来访问相对应的window对象。每个window对象都有name属性,其中包含框架的名称
top:始终指向最外层的框架,使用它可以确保正确的访问另一个框架
parent:始终指向当前框架的直接上层框架
self:始终指向window
注意:在使用框架的情况下,浏览器会存在多个Global对象。在每个框架中定义的全局变量会自动生成为框架中window对象的属性。由于window对象都包含原生类型的构造函数,因此每个框架都会有一套自己的构造函数,这些构造函数一一对应,但并不相等

窗口位置
属性名含义版本支持
screenLeft表示窗口相对于屏幕左边位置IE、Safari、Opera 和Chrome
screeTop表示相对于屏幕上边位置IE、Safari、Opera 和Chrome
screeX窗口距离屏幕左边位置Firefox,Safri,Chrome,Opera
screeY窗口距离屏幕上边的位置Firefox,Safri,Chrome,Opera

注意虽然opera都实现了属性但属性并不对应

//通用代码
var leftPos = (typeof window.screenLeft == "number") ? window.screenLeft : window.screenX;
var topPos = (typeof window.screenTop == "number") ? window.screenTop : window.screenY;

注意:无法再夸浏览器的条件下后去窗口左边和上边的精确坐标值
在IE Opera中sreenLeft和screenTop中保存的是屏幕左边和上边到window对象表示的页面可视区域的距离
在Chrome Firefox 和Safari中,screenY和screenTop中保存的是整个浏览器窗口相对于坐标的值
问题:Firefox Safari Chrome 始终返回页面中每个框架的top.screenX和top.screenY的值,即使页面发生偏移,而IE和Opera则返回精确值
使用moveTo和moveBy可能将窗口精确的移动到一个新的位置。接受两个参数moveTo接受新位置的x和y值而moveby接受移动像素数
在Opera和IE7+中禁用,此方法不使用框架只对最外层的window对象使用

窗口大小
//兼容模式下获得可窗口大小
var pageWidth = window.innerWidth,
    pageHeigt = window.innerHeight;

if (typeof pageWidth != "number"){
    if(document.cpmpatMode == "CSS1Compat"){
        pageWidth = document.docuemntElement.clientWidth;
        pageHeight = document.documentElement.clientHeight;
    } else {
        pageWidth = document.body.clientWidth;
        pageHeight = document.body.clientHeight;
    }
}
方法名含义
resizeTo()调整窗口大小
resizeBy()调整窗口大小

Opera和IE7+中禁用

导航和打开窗口
方法名含义版本支持
window.open()导航到一个特定的URl,也可以打开一个新的浏览器窗口,接受参数1.要加载的URL,2.窗口目标,3.一个特性字符串(下图是可选择的字符串,可多选一’,’分隔),4.一个表示新页面是否取代浏览器历史记录中当前加载页面的布尔值.返回打开窗口的对象
窗口对象.close()关闭窗口对象
closed属性表示窗口是否关闭
opener属性表示打开窗口的原始窗口

这里写图片描述

间接调用和超时调用
方法名含义版本支持
setTimeout(function(){},number)function:执行的js代码,number:然后执行的毫秒数.第一个参数可为字符串,第二个参数会告诉js在过多长时间把当前任务添加到队列中,如果队列为空,添加的代码会立即执行,队列不为空,等待前面的代码执行完后执行.返回超时调用ID,表示执行计划代码的唯一标识
clearTimeout(超时ID)取消任务
setInterval(function(){},number)与setTimeout类似,但此表示间歇调用,循环每number毫秒执行一次function代码,返回间歇调用ID
clearInterval(间歇调用ID)取消任务
系统对话框
方法名含义
alert()通常生成警告
confirm()会生成带ok和cancel按钮的提示框,当点击ok时返回true,点击cancel返回false
prompt()带输入文本的提示框,返回输入文本
window.print()显示打印对话框
window.find()显示打印对话框
location对象

提供与当前窗口中加载的文档相关的信息,还提供导航功能
即是window对象的属性也是document对象的属性
这里写图片描述

//解析URl,将查询变为对象数组
function getQueryStringArgs(){
    var qs = (location.search.length > 0 ? location.search.substring(1) : ""),
    args = {},
    items = qs.length ? qs.split("&") : [],
    item = null,
    name = null,
    value = null,
    i = 0,
    len = items.length;
    for(i = 0; i < len; i++){
        item = items[i].split("=");
        name = decodeURLComponent(item[0]);
        value = decodeURLComponent(item[1]);
        if(name.length){
            args[name] = value;
        }
    }
    return args;
}
方法含义
location.assign(“URL地址”)立即打开URl并在浏览器的历史记录中生成一条记录,如果将location.href或window.location赋值一个URL值,也会调用assign方法
location.replace(“URL地址”)位置改变但不会生成历史记录
reload()重新加载当前显示页面,如果上次页面请求未改变则从缓存中读取,可传入true强制从服务器取数据

识别客户端的事实标准
这里写图片描述
这里写图片描述
这里写图片描述

检测插件
//检测所有浏览器中的Flash
function hasFlash(){
    var result = hasPlugin("Flash");
    if(!result){
        result = hasIEPlugin("ShockwaveFlash.ShockwaveFlash");
    }
    return result; 
}

//检测所有浏览器中的QuickTime
function hasQuickTime(){
    var result = hasPlugin("QuickTime");
    if(!result){
        result = hasIEPlugin("QuickTime.QuickTime");
    }
    return result; 
}
function hasIePlugin(name){
    try{
        new ActiveXObject(name);
        return true;
    }catch(e){
    return false;
    }
}
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;
        }
    }
}
screen

用处不大
这里写图片描述
这里写图片描述

history

保存着用户上网的浏览记录
history是window的属性
|方法|含义|
|go()|history.go(-1)后退一页,history.go(1)前进一页,history.go(2)前进两页,history.go(“XXX.com”)跳转至最近的XXX.com页面|
|back()|后退|
|forward()|前进|
|length属性|保存历史记录的数量|

DOM

DOM将HTML或XML描述成一个由多层节点构成的结构,节点分为几种不同的类型,每种类型分别表示文档中不同的信息以及标记

Node类型

DOM1定义了Node接口,该接口有所有节点实现

属性或方法含义
nodeType属性表示节点类型这里写图片描述这里写图片描述

if(someNode.nodeType == 1){
alert("Node is an element.")
}
|
|nodeName和nodeValue|如果节点为元素则nodeName为元素的标签名,nodeValue为null|
|childrenNodes属性|其中保存着一个NodeList对象,保存是一个类数组对象,保存一组有序的节点,该对象基于html文本变化|
|parentNode属性|指向文档树中的父节点|
|previousSibling|同级上个节点|
|nextSibling|同级下个节点|
|firstChildren|第一个子节点|
|lastChildren|最后一个子节点|
|ownerDocument|代表整个文档的文档节点|
|appendChildren()|向childrenNodes列表的末尾添加一个节点,返回新增的节点|
|insertBefore()|接受两个参数,要插入的节点和作为参照的节点|
|replaceChild()|接受两个参数,要插入的节点和要替换的节点|
|cloneNode()|创建调用这个方法的节点的一个完全相同的副本,接受一个布尔参数,表示是否执行深度复制|

Document类型

表示文档,在浏览器中document对象是HTMLDocument(继承自Document类型)的一个实例,表示整个HTML页面

属性或方法含义
nodeType值为9
nodeName“#document”
nodeValuenull
parentNodenull
ownerDocumentnull
documentElement始终指向元素
childNodes子节点列表,第一个为元素
document对象的body属性直接指向元素
doctype引用
title浏览器窗口的标签栏或标签页上的标题
URL页面完整URL,地址栏上显示,不可设置
domain页面域名,可设置,通过设置domain值页面之间可以互相访问js对象,赋值后不可设置会原值
referrer链接到当前页面的那个页面的URL,不可设置
getElementById()根据元素的ID获得对应元素,IE8较低版本不区分大小写,只返回第一次出现的元素,在IE8以及较低版本中name特征与给定ID匹配的表单元素input,textarea,button,select也会返回
getElementByTagName()根据标签名返回对应元素,返回NodeList
getNameByName()返回给定name特性的所有元素
anchors包含文档中所有name特性的元素
applets包含文档中所有的元素
forms包含文档中所有的元素
images包含文档中所有的元素
links包含文档中所有带href特性的元素
文档写入
write()接受字符串,原样写入
writeln()在字符串的尾部添加换行,字符串转义
open()
close()
Element

表现XML和HTML

属性或方法含义
nodeType1
nodeName,tagName元素的标签名
nodeValuenull
parentNodeDocument或Element
attributes包含一个NamedNodeMap,getNamedItem(name):返回nodeName属性等于name的节点;removeNamedItem(name):从列表中移除nodeName属性等于name的节点;setNamedItem(node):向列表中添加节点,已节点的nodename属性为索引;item(pos)返回位于数字pos位置处的节点
HTMLElement

继承Element添加属性

属性含义
id元素在文档中的唯一标识
title元素的附加说明
lang元素内容的代码语言
dir语言方向
className与class特性对应
getAttribute(“name”)获得元素特性,返回字符串
setAttribute()自定义元素加data-前缀,接受两个参数,1.要设置的特性名,2.值
removeAttribute()移除特性根据名称

HTML元素都是HTMLElement的具体子类表示的

创建元素

document.createElement(“元素标签名或完整元素标签”);返回元素对象

Text

包含可以照字面解释的纯文本内容

属性或方法含义
nodeType3
nodeName“#text”
nodeValue节点所包含的文本
parentNode一个Element
appendData(text)将text添加到节点的末尾
deleteData(offset,count)从offset指定位置开始删除count个字符
insertData(offset,text)从offset指定位置插入text
replcaeData(offset,count,text)用text替换从offset指定的位置到offset+count处的文本
splitText(offset)从offset指定的位置将当前恩本的节点分为两个文本节点
substrigData(offset,count)提取offset指定的位置到offset+count为止处的字符串
length属性文本长度

document.createTextNode(“字符串”);根据字符串创建text对象
元素对象.normalize()合并该元素下的文本节点
元素对象.splitText(number)按number为止分割文本节点

Comment

注释

属性名含义
nodeType8
nodeName“#comment”
nodeValue注释内容

与text继承相同的基类

CDATASection

只针对XMl文档表示CDATA区

属性含义
nodeType4
nodeName“#cdata-section”
nodeValueCDATA区的内容
DocumentType

包含doctype信息保存在document.doctype对象中

属性含义
node10
nodeNamedoctype的名称
nodeValuenull
parentNodeDocument
name文档类型名称
entities文档类型藐视的实体NamedNodeMap对象
notations是由文档类型描述的符号的NamedNodeMap对象
DocumentFragment

DOM规定文档片段是一种轻量级的文档,可包含控制节点

属性或方法含义
nodeType11
nodeName“#document-fragment”
nodeValuenull
parentNodenull

document.createDocumentFragment();
临时文档片段,可以将需添加的元素先添加到该对象中,然后将该对象添加给document,直接添加给docuemt,降低性能。

Attr

表示元素的特性

属性名含义
nodeType2
nodeName特性名称
nodeValue特性值
name特性名称
value特性值
specified区别特性实在代码中指定还是默认

document.createAttribute()
element.setAttributeNode(attr)

DOM操作
动态脚本

使用DOM创建script元素添加到document中

var script = document.createElement("script");
script.type = "text/javascript";
script.src = "client.js";
//当不引用外部文档时
script.appendChild(cocument.createTextNode("function sayHi(){alert('hi')}"));//ie中出错
script.text = "function sayHi(){alert('hi')}";
doucment.body.appendChild(script);
动态样式
var style = document.createElement("style");
style.style = "text/css";
try{
    style.appendChildren(document.createTextNode("body{background-color:red}"));
}catch(e){
    style.styleSheet.cssText = "body{background-color:red}";
}
var head = document.getElementByTagName("head")[0];
head.appednChildren(style);
操作表格
var table = document.createElement("table");
table.border = 1;
table.width = "100%";
var tbody = document.createElement("tbody");
table.appendChildren(tbody);
var row1 = document.createElement("tr");
tbody.appendChildren(row1);
var cell_1 = document.createElement("td");
cell_1.appendCHildren(document.createTextNode("Cell 1,1"));
row1.appednChildren(cell_1);

table元素属性和方法

属性或方法含义
caption保存对元素的指针
tBodies是元素的HTMLCollection
tFoot保存对元素的指针
tHead保存对元素的指针
rows表格所有行的HTMLCollection
createThead()创建thread元素,将其放到表格中,返回引用
createTFoot()创建tfoot元素,将其放入表格,返回引用
createCaption()创建caption元素,将其放入表格返回引用
deleteTHead()删除thead
deleteCaption()删除caption元素
deleteTFoot()删除tfoot
deleteRow(pos)删除指定行
insertRow(pos)向指定行插入一行

tbody属性和方法

属性和方法含义
rows保存tbody元素中的HTMLCollection
deleteRow(pos)删除指定行
insertRow(pos)向rows集合中的指定位置插入一行,返回插入行的引用

tr属性和方法

属性和方法含义
cells保存tr元素中单元格的HTMLCollection
deleteCell(pos)删除指定单元格
insertCell(pos)项cells集合指定位置插入单元格

//客户端检测,DOM一致性检测

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值