[转]《精通Javascript》笔记:第五章(DOM)

《精通Javascript》笔记:第五章(DOM)

Published by sansan at 3:06 pm under 前端|Front-End

  1. DOM是一个表达XML文档的标准(由W3C制定的)。它未必是最快的方式,也未必是最轻量级的或者最容易使用的,但确实应用最广泛的。
  2. 访问根元素<html>:document.documentElement
  3. 处理DOM中的空格:终于知道前几天看的as程序中为啥要清空格了。
    Firefox下任何空格、换行、tab都会被认为是一个childnode,而IE下只有内联元素(如em,span)后的换行、空格、tab会被认为是一个childnode。
function cleanWhiteSpace(elem) {
	elem = elem || document;
	var cur = elem.firstChild;
	while (!cur) {
		if (cur.noteType == 3 && !/\S/.test(cur.nodeValue)) {
			elem.removeChild(cur);
		} else if (cur.nodeType == 1) {
			cleanWhiteSpace(cur);
		}
		cur = cur.nextSibling;
	}
}
元素:1,document.ELEMENT_NODE
文本:3,document.TEXT_NODE
文档:9,document.DOCUMENT_NODE
常量只对非IE浏览器有效 Firefox、Safari、Opera中存在一个强大的对象原型(Object Prototype)叫HTMLElement。幸运的是, jason Karl Davis为两个不支持的浏览器写了 一个支持访问HTMLElement的库。 通过getElementsByTagName返回的nodeList数组,不支持pop(), push(), shift()等数组的常用方法。 浏览器的渲染和操作顺序大致如下:
1) HTML解析完毕
2) 外部脚本和样式表加载完毕
3) 脚本在文档内解析并执行
4) HTML DOM完全构造起来
5) 图片和外部内容加载
6) 网页完成加载
function domReady(f) {
	if (domReady.done) return f();
	if (domReady.timer) {
		domReady.ready.push(f);
	} else {
		addEvent(window, ‘load’, isDOMReady);
		domReady.ready = [f];
		domReady.timer = setInterval(isDOMReady, 13);
	}
}
function isDOMReady() {
	if (domReady.done) return false;
	if (document && document.getElementsByTagName && document.getElementById && document.body) {
		clearInterval(domReady.timer);
		domReady.timer = null;
		for (var i=0; i<domReady.ready.length; i++) {
			domReady.ready[i]();
		}
		domReady.ready = null;
		domReady.done = true;
	}
}
Selector: CSS1 CSS2 CSS3  cssQuery  XPath 1.0 XPath 2.0 获取元素内文本内容的一个窍门是,需要记住元素并不是直接包含文本的,而是包含在一个子文本节点中。
elem.innerText; // 非Mozilla浏览器
elem.firstChild.nodeValue; // 其他浏览器

// 一个获取元素文本内容的通用函数
function text(e) {
	var t = ”;
	e = e.childNodes || e;
	for (var i=0; i<e.length; i++) {
		t += e[i].nodeType != 1 ? e[i].nodeValue : text(e[i].childNodes);
	}
	return t;
}
存取属性:className, htmlFor, cssFloat, cssText 可以设置和获取非传统的属性,就是自创的属性。(比如菜单展开的时候,设置open=true) 记住insertBefore(insert, before)的参数顺序:看函数名,insert第一个,before第二个。 根据 http://quirksmode.org的说法,用innerHTML注入html比DOM方法快很多。 转化一个DOM节点/HTML字符串混合型参数数组为纯粹的DOM节点数组
function checkElem(a) {
	var r = [];
	if (a.constructor != Array) a = [a];

	for (var i=0; i<a.length; i++) {
		if (a[i].constructor == String) {
			var div = document.createElement(’div’);
			div.innerHTML = a[i];
			for (var j=0; j<div.childNodes.length; j++) {
				r[r.length] = div.childNodes[j];
			}
		} else if (a[i].length) {
			for (var j=0; j<a[i].length; j++) {
				r[r.length] = a[i][j];
			}
		} else {
			r[r.length] = a[i];
		}
	}
	return r;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值