Javascript高级程序设计第十、十一章

第10章

1.注意,IE中的所有DOM对象都是以COM对象的形式实现的。这意味着IE中的DOM对象与原生Javascript对象的形式或活动特点并不一致。

2.判断节点是元素的方法,跨浏览器兼容

if(someNode.nodeType == 1){
  alert("Node is an element..");
}
3。对arguments对象可以使用Array.prototype.slice()方法可以将其转换为数组,对类数组都可以

但对COM对象不可以(IE8-),手动转换为数组代码,应用了监测怪癖的形式

function convertToArray(nodes){
  var array = null;
  try {
    array = Array.prototype.slice.call(nodes, 0);
  }catch(ex){
    array = new Array();
    for(var i=0,len=nodes.length;i<len;i++){
      array.push(nodes[i]);
    }  
  }
return array;
}

①每个节点都有一个childNodes属性,其中保存着一个NodeList对象。NodeList是一个类数组,它实际上是基于DOM结构动态执行查询的结果。

4.Document类型

①document.documentElement:始终指向HTML页面中的<html>元素

②document.doctype:由于浏览器对此支持不一致,这属性用处有限

③document.title:获取或设置文档的标题

④document.URL(可读)、document.domain(可读可写)、document.referrer(来源页面,可读)。

document.domain的用处:当页面中包含来自其他子域的的框架或内嵌框架时,设置document.domain就很方便了

由于跨域安全限制,来自不同子域的页面无法通过Javascript通信。

⑤查找元素:getElementById("id")和getElementsByTagName("tagName"),大小写区分(IE8-不区分),不存在则返回null

getElementsByTagName("tagName")返回HTMLCollection对象,一个“动态”集合

getElementByName("name"),比较难见到,返回一个HTMLCollection对象。

⑥特殊集合:document.forms:和getElementsByTagName("form")一样,

document.images:getElementsByTagName("img")一样

⑦DOM一致性检测,接受两个参数,要检测的DOM功能的名称、版本号

var hasXmlDom = document.implementation.hasFeature("XML","1.0");具体看书上P259

⑧文档写入:write()和writeIn(),在页面加载的过程中,可以使用这两个方法向页面中动态加入内容

⑨document.head:支持的浏览器不多,要跨兼容性的话:

var head = document.head || document.getElementById("head")[0]

⑩document.charset:返回文档当前的字符,在chrome浏览上设置没反应了

document.defaultCharset:表示根据默认浏览器及操作系统的设置,当前文档默认的字符集应该是什么

5.Element类型

①通过getAttribute()方法可以取得自定义特性,特性不区分大小写。

②有两类特殊的特性。一个是style特性,返回的是一个对象,而getAttribute()返回文本。

一个是onclick特性,返回的是一个javascript函数,getAttribute()返回文本。

由于这些特性,开发人员经常不使用getAttribute(),而是只使用对象的属性。只有在取得自定义特性的情况下,才会使用getAttribute()方法。

6.理解DOM的关键,就是理解DOM对性能的影响。DOM操作往往是Javascript程序中开销最大的部分,而因访问Nodelist导致的问题也最多。Nodelist对象都是“动态的”,这就意味着每次访问NodeList对象,都会执行一次查询。

一个是onclick特性,返回的是一个javascript函数,getAttribute()返回文本。

由于这些特性,开发人员经常不使用getAttribute(),而是只使用对象的属性。只有在取得自定义特性的情况下,才会使用getAttribute()方法。

第11章:

1.选择符API

①querySelector()方法接受一个 css选择符 ,返回与该模式匹配的第一个元素,如果没有匹配的元素则返回null,可以在通过

Document类型和Element类型调用

querySelectorAll()返回一个Nodelist的实例,但和Nodelist类型不同,其底层实现则类型于一组元素的快照

2.元素遍历

firstElementChild、lastElementChild、previousElementSibling、nextElementSibling是firstChild等的元素版,

可惜啊可惜啊,IE9+啊,IE8的市场占有率还这么大可不能用啊

3.插入标记

①innerHTML属性,写入script和style会有限制,并且在IE~IE8中,不是所有元素都支持innerHTML属性,

table、tbody、thead、tfoot、tr等都不支持

使用该属性的大大好处:插入大量HTML标记时,效率高。并且在设置innerHTML时会创建一个HTML解析器,这个解析器事在浏览器级别的代码(通常是C++编写的)基础上运行的,因此比执行Javascript快得多。但不可避免地,创建和销毁HTML解析器也会带来性能损失

4.scrollIntoview()方法,跨浏览器兼容

该方法可以再所有HTML元素上调用,通过滚动浏览器窗口或某个容器元素,调用元素可以出现在视口。不传参数或穿参数true,元素的顶部与视口顶部平齐。如果传入false作为参数,调用元素会尽可能全部出现在视口中

5.文档模式

IE8引入了一个新的概念“文档模式”,别和“兼容模式”(BackCompat、CSS1Compat)混淆了,页面的文档模式决定了可以使用什么功能。换句话说,文档模式决定了你可以使用哪个级别的CSS,可以在Javascript中使用哪些API,以及如何对待文档类型(doctype),有IE5(只有此时混杂模式)、IE7、IE8、IE9(最高级的模式)。

①默认情况下,浏览器会通过文档类型声明来确定是使用使用最佳的可用文档模式,还是混杂模式

②要强制浏览器以某种模式渲染页面,可以使用HTTP头部信息X-UA-Compatible,或通过等价的<meta>标签来设置:

<meta http-equiv="X-UA-Compatible" content="IE-IEVersion">

6.children属性:HTMLCollection的实例,只包含元素中同样还是元素的子节点。除此之外,children属性与childNodes没什么区别。IE8以及更早版本的children属性中也会包含注释节点,但IE9之后的版本则只返回元素节点,支持此属性的浏览器IE5,感觉会很有用啊,哈哈哈。

7.innerText属性:返回操作元素中包含的所有文本内容,包括子文档树中的文本,写入值中,结果会删除元素的所有子节点,插入包含相应文本值的文本节点

支持此属性的浏览器包括IE4+、Safari 3+、Opera 8+和Chrome。

firefox不支持此属性,不过支持textContent,支持此属性的浏览器IE9+

支持此跨浏览器兼容性写法如下:

function getInnerText(element){
  return (typeof  element.textContent == "string")?element.textContent : element.innerText;
}

function setInnerText(element){
  if(typeof element.textContent == "string"){
    element.textContent = text;
  }else {
    element.innerText = text;
  }
}






.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值