}
4、其他注意事项
若加载页面时出现 window.onload = firstFunction; window.onload = secondFunction; 此时最后的
secondFunction函数才会被实际执行
若要把多个JavaScript函数绑定到onload事件处理函数上,有两种方法
1> window.onload = function() {
firstFunction();
secondFunction();
}
2> 使用函数AddLoadEvent(),其完成的操作为:
A. 把现有的window.onload事件处理函数的值存入变量oldonload
B. 如果在这个处理函数上还没有绑定任何函数,就像平时那样把新函数添加给它
C. 如果在这个处理函数上已经邦定理一些函数,就把新函数追加到现有指令的末尾
实现方法为:AddLoadEvent(firstFunction); AddLoadEvent(secondFunction);
其中:
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
oldonload();
func();
}
}
}
五、动态创建HTML内容
要点
用来动态创建HTML内容的“老”技巧:document.write()方法和innerHTML属性
深入剖析DOM方法:createElement()、createTextNode()、appendChild()和insertBefore().
1、document.write()方法:方便快捷的把字符串插入到文档里
2、innerHTML 属性可以用来读、写某给定元素里的HTML内容,innerHTML属性是一项专利技术,不是一
项业界标准。
3、createElement()方法:创建一个新的元素。用法为:document.createElement(nodeName)
4、appendChild()方法:把新建的节点插入某个文档的节点数的最简单的办法是,让它成为这个文档的某个
现有节点的一个子节点。
appendChild()方法的用法为: parent.appendChild(child) 例如要实现元素P成为testDiv元素的一个子节
点
var para = document.createElement("P");
//新创建一P元素
var testDiv = document.getElementById("testDiv");
testDiv.appendChild(para);
//把元素P成为testDiv元素的子节点
//提取出来testDiv节点
5、createTextNode()方法:创建一个文本节点
用法为:document.createTextNode(text) 如:document.createTextNode("Hello world"); //创建一个内容
为"Hello world"的文本节点
//新创建一P元素
//提取出来testDiv节点
//把元素P成为testDiv元素的子节点
用appendChild()方法把文本节点插入为某个现有元素的子节点
接4:
var para = document.createElement("P");
var testDiv = document.getElementById("testDiv");
testDiv.appendChild(para);
var txt = document.createTextNode("Hello world");
para.appendChild(txt);
也可以把上面的步骤交换下位置,变为:
var para = document.createElement("P");
var txt = document.createTextNode("Hello world");
para.appendChild(txt);
var testDiv = document.getElementById("testDiv");
testDiv.appendChild(para);
//把元素P成为testDiv元素的子节点
//新创建一P元素
//用appendChild()方法把txt这个文本节点插入为现有元素P的子节点上去
//创建一个内容为"Hello world"的文本节点
//用appendChild()方法把txt这个文本节点插入为现有元素P的子节点上去
//创建一个内容为"Hello world"的文本节点
//提取出来testDiv节点
6、insertBefore()方法:将把一个新元素插入到一个现有元素的前面
调用语法为:
parentElement.insertBefore(newElement,targetElement);
其中:newElement是想插入的元素;targetElement是想把新元素newElement插入到哪个现有元素
(targetElement)的前面;
parentElement是上面两元素newElement、targetElement共同的父元素(这儿的父元素一般是
targetElement元素的parentNode属性)如:
gallery = document.getElementById("imagegallery");
var
gallery.parentNode.insertBefore(placeholder,gallery); //把placeholder元素插入到图片清单的前面
gallery.parentNode.insertBefore(description,gallery); //把description元素插入到图片清单的前面
但DOM中没有insertAfter()方法。自身定义insertAfter()方法。如下:
function insertAfter(newElement,targetElement) {
var parent = targetElement.parentNode;
if(parent.lastChild == targetElement) {
parent.appendChild(newElement);
//把目标元素的parentNode属性值提取到变量parent里
//检查目标元素是不是parent的最后一个子元素
} else {
parent.insertBefore(newElement,targetElement.nextSibling);
//targetElement.nextSibling为目
标元素的下一个子元素即目标元素的下一个兄弟节点
}
}
7、程序代码
1> showPic.js代码如下
//showPic()方法
function showPic(whichpic) {
if (!document.getElementById("placeholder")) return true;
var source = whichpic.getAttribute("href");
var placeholder = document.getElementById("placeholder");
placeholder.setAttribute("src",source);
if (!document.getElementById("description")) return false;
if (whichpic.getAttribute("title")) {
var text = whichpic.getAttribute("title");
} else {
var text = "";
}
var description = document.getElementById("description");
if (description.firstChild.nodeType == 3) {
description.firstChild.nodeValue = text;
}
return false;
}
//此函数负责处理有关的事件。将遍历imagegallery清单里的每个链接,并给它加上一个onclick事
件处理函数。当用户点击这个链接中的某一个时
//就会调用showPic()函数
function prepareGallery() {
if (!document.getElementsByTagName) return false;
if (!document.getElementById) return false;
if (!document.getElementById("imagegallery")) return false;
var gallery = document.getElementById("imagegallery");
var links = gallery.getElementsByTagName("a");
for ( var i=0; i < links.length; i++) {
links[i].onclick = function() {
return showPic(this);
}
links[i].onkeypress = links[i].onclick;
}
}
//通用型函数,在很多场合都能派上用场
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
oldonload();
func();
}
}
}
//通用型函数,在很多场合都能派上用场
function insertAfter(newElement,targetElement) {
var parent = targetElement.parentNode;
//把目标元素的parentNode属性值提取到变量parent
里
if(parent.lastChild == targetElement) {
parent.appendChild(newElement);
} else {
//检查目标元素是不是parent的最后一个子元素
parent.insertBefore(newElement,targetElement.nextSibling);
//targetElement.nextSibling为目标元素的下一个子元素即目标元素的下一个兄弟节点
}
}
//实现

Choose an image.
的功能
//创建一个img元素和一个p元素。这个函数将把这些新创建的元素插入到5_BackGallery.htm文
档的节点树里----当然,新元素会被插入到imagegallery清单的后面
function preparePlaceholder() {
if(!document.createElement) return false;
if(!document.createTextNode) return false;
if(!document.getElementById) return false;
if(!document.getElementsByTagName) return false;
var placeholder = document.createElement("img");
placeholder.setAttribute("id","placeholder");
placeholder.setAttribute("src","../Images/placeholder.gif");
placeholder.setAttribute("alt","My image Gallery");
var description = document.createElement("p");
description.setAttribute("id","description");
var descText = document.createTextNode("Choose an Image");
description.appendChild(descText);
var gallery = document.getElementById("imagegallery");
insertAfter(placeholder,gallery);
insertAfter(description,placeholder);
gallery.parentNode.insertBefore(placeholder,gallery); 将placeholder元素插入到gallery元素的
//将description元素插入到placeholder元素的后面
//将placeholder元素插入到gallery元素的后面
gallery.parentNode.insertBefore(description,gallery);
document.getElementsByTagName("body")[0].appendChild(placeholder);
//将placeholder元
前面
//
//
//
素插入到位于文档末尾的标签的签名
//
document.getElementsByTagName("body")[0].appendChild(description);
//将description元素
插入到位于文档末尾的