function addLoadEvent(func)
{
var oldonload=window.onload;
if(typeof window.onload!='function')
{
window.onload=func;
}
else
{
window.onload=function()
{
oldonload();
func();
}
}
}

function addClass(element,value) {
if (!element.className) {
element.className = value;
} else {
newClassName = element.className;
newClassName+= " ";
newClassName+= value;
element.className = newClassName;
}
}

function insertAfter(newElement,targetElement)
{
var parent = targetElement.parentNode;
if(parent.lastChild==targetElement)
{
parent.appendChild(newElement);
}
else
{
parent.insertBefore(newElement,targetElement.nextSibling);
}
}

function highlightPage()
{
if(!document.getElementsByTagName) return false;
if(!document.getElementById) return false;

var headers=document.getElementsByTagName('header');
if(headers.length==0) return false;
var navs=headers[0].getElementsByTagName('nav');
if(navs.length==0) return false;

var links=navs[0].getElementsByTagName("a");
var linkurl;

for(var i=0;i<links.length;i++)
{
linkurl=links[i].getAttribute("href");
if(window.location.href.indexOf(linkurl)!=-1)
{
links[i].className="here";
var linktext=links[i].lastChild.nodeValue.toLowerCase();
document.body.setAttribute("id",linktext);
return true;
}

}
}

/* moveElement */

function moveElement(elementID,final_x,final_y,interval){
if(!document.getElementById)return false;
if(!document.getElementsByTagName) return false;
var elem=document.getElementById(elementID);
if(elem.movement){
clearTimeout(elem.movement);
}

if(!elem.style.left){
elem.style.left="0px";
}
if(elem.style.top){
elem.style.top="0px";
}

var xpos=parseInt(elem.style.left);
var ypos=parseInt(elem.style.top);
if(xpos==final_x&&ypos==final_y){
return true;
}

if(xpos<final_x){
var dist=Math.ceil((final_x-xpos)/10);
xpos+=dist;
}

if(xpos>final_x){
var dist=Math.ceil((xpos-final_x)/10);
xpos-=dist;
}
if(ypos<final_y){
var dist=Math.ceil((final_y-ypos)/10);
ypos+=dist;
}

if(ypos>final_y){
var dist=Math.ceil((ypos-final_y)/10);
ypos-=dist;
}

elem.style.left=xpos+"px";
elem.style.top=ypos+"px";
var repeat="moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";
elem.movement=setTimeout(repeat,interval);

}

/* prepareSlideshow */
function prepareSlideshow(){
if(!document.getElementById) return false;
if(!document.getElementsByTagName) return false;
if(!document.getElementById("intro")) return false;

var intro=document.getElementById("intro");
var slideshow=document.createElement("div");
slideshow.setAttribute("id","slideshow");
var preview =document.createElement("img");
preview.setAttribute("src","images/slideshow.gif");
preview.setAttribute("alt","a glimpse of what awaits you ...");
preview.setAttribute("id","preview");
slideshow.appendChild(preview);
insertAfter(slideshow,intro);

var links=document.getElementsByTagName("a");
var destination;

for(var i=0;i<links.length;i++)
{

links[i].onmouseover=function()
{
destination=this.getAttribute("href");
if(destination.indexOf("index.html")!=-1){
moveElement("preview",0,0,5);
}
if(destination.indexOf("about.html")!=-1){
moveElement("preview",-150,0,5);
}
if(destination.indexOf("photos.html")!=-1){
moveElement("preview",-300,0,5);
}
if(destination.indexOf("live.html")!=-1){
moveElement("preview",0,-450,5);
}
if(destination.indexOf("contact.html")!=-1){
moveElement("preview",0,-600,5);
}
}
}
console.log("ok");
}

/* 內部導航*/

function showSection(id){
var sections=document.getElementsByTagName("section");
for(var i=0;i<sections.length;i++){
if(sections[i].getAttribute("id")!=id){
sections[i].style.display="none";
} else{
sections[i].style.display="block";

}
}
}

function prepareInternalnav()
{
if(!document.getElementsByTagName) return false;
if(!document.getElementById) return false;
var articles=document.getElementsByTagName("article");
if(articles.length==0)return false;
var navs=articles[0].getElementsByTagName("nav");

if(navs.length==0) return false;
var nav=navs[0];
var links=articles[0].getElementsByTagName("a")

for(var i=0;i<links.length;i++){
var sectionId=links[i].getAttribute("href").split("#")[1];
if(!document.getElementById(sectionId)) continue;
document.getElementById(sectionId).style.display="none";
links[i].destination=sectionId;

links[i].onclick=function(){
showSection(this.destination);
return false;
}
links[i].class="here";
}
}

/* Javascript 圖片庫 */
function showPic(whichpic){
if(!document.getElementById("placeholder")) return false;
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;
}

function preparePlaceholder(){
if(!document.createElement) return false;
if(!document.createTextNode) return false;
if(!document.getElementById) return false;
if(!document.getElementById("imagegallery")) 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(description,gallery);
insertAfter(placeholder,description);
}

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);
}
}
}

/* 增強表格*/
function stripeTables(){
if(!document.getElementsByTagName) return false;
var tables=document.getElementsByTagName("table");

for(var i=0;i<tables.length;i++){
var odd=false;
var rows=tables[i].getElementsByTagName("tr");
for(var j=0;j<rows.length;j++){
if(odd==true){
addClass(rows[j],"odd");
odd=false;
} else{
odd=true;
}
}
}
}

function highlightRows(){
if(!document.getElementsByTagName) return false;
var rows=document.getElementsByTagName("tr");

for(var i=0;i<rows.length;i++){
rows[i].oldClassName=rows[i].className;
rows[i].onmouseover=function(){
addClass(this,"highlight");
}
rows[i].onmouseout=function(){
this.className=this.oldClassName;
}
}
}

function displayAbbreviations(){

if(!document.getElementsByTagName||!document.createElement||!document.createTextNode) return false;
var abbreviations=document.getElementsByTagName("abbr");
if(abbreviations.length<1) return false;
var defs=new Array();

for(var i=0;i<abbreviations.length;i++){
var current_abbr=abbreviations[i];
if(current_abbr.childNodes.length<1) continue;
var definition=current_abbr.getAttribute("title");
var key=current_abbr.lastChild.nodeValue;
defs[key]=definition;
}

var dlist=document.createElement("dl");
for(key in defs){
var definition=defs[key];
var dtitle=document.createElement("dt");
var dtitle_text=document.createTextNode(key);
dtitle.appendChild(dtitle_text);

var ddesc=document.createElement("dd");
var ddesc_text=document.createTextNode(definition);
ddesc.appendChild(ddesc_text);

dlist.appendChild(dtitle);
dlist.appendChild(ddesc);
}

if(dlist.childNodes.length<1) return false;
var header=document.createElement("h3");
var header_text=document.createTextNode("Abbreviations");
header.appendChild(header_text);

var articles=document.getElementsByTagName("article");
if(articles.length==0) return false;
var container=articles[0];
container.appendChild(header);
container.appendChild(dlist);
}

/* 表單 */
/*單擊label , focus相應的input 項 */
function focusLabels(){
if(!document.getElementsByTagName) return false;
var labels=document.getElementsByTagName("label");
for(var i=0;i<labels.length;i++){
if(!labels[i].getAttribute("for")) continue;
labels[i].onclick=function(){
var id=this.getAttribute("for");
if(!document.getElementById(id)) return false;
var element=document.getElementById(id);
element.focus();
}
}
}

/* 表單 */
/*對不支持html5的browsers, 以javascript實現預填值 */
function resetFields(whichform){
if(Modernizr.input.placeholder) return;
for(var i=0;i<whichform.elements.length;i++){
var element=whichform.elements[i];
if(element.type=="submit") continue;
var check=element.placeholder||element.getAttribute('placeholder');

if(!check) continue;
element.onfocus=function(){
var text=this.placeholder||this.getAttribute('placeholder');
if(this.value==text){
this.className='';
this.value="";
}
}
element.onblur=function(){
if(this.value==""){
this.className='placeholder';
this.value=this.placeholder||this.getAttribute('placeholder');
}
}
element.onblur()
}
}

/* 表單 */
/* 是否已填寫表單內容驗證 */
function isFilled(field){
if(field.value.replace(' ','').length==0) return false;
var placeholder=field.placeholder||field.getAttribute('placeholder');
return(field.value!=placeholder);
}

/* 表單 */
/* 是否是否為郵箱地址 */
function isEmail(field){
return(field.value.indexOf("@")!=-1&&field.value.indexOf(".")!=-1);
}

/* 表單 */
/* 驗證 */
function validationForm(whichform){
for(var i=0;i<whichform.length;i++){
var element=whichform.elements[i];
if(element.required=='required'){
if(!isFilled(element)){
alert("Please fill in the "+element.name+" field.");
return false;
}
}

if(element.type=='email'){
console.log('not email address!');
if(!isEmail(element)){
alert("The "+element.name+" field must be a valid email address.");
console.log('not email address!');
return false;
}
}
}
return true;
}

/* 表單-Ajax */
/*return XMLHttpRequest*/
function getHTTPObject(){
if(typeof XMLHttpRequest=="undefined")
XMLHttpRquest=function(){
try{return new ActiveXObject("Msxml2.XMLHTTP.6.0");}
catch(e){}
try{return new ActiveXObject("Msxml2.XMLHTTP.3.0");}
catch(e){}
try{return new ActiveXObject("Msxml2.XMLHTTP");}
catch(e){}
}
return new XMLHttpRequest();
}

/* 表單-Ajax */
/*顯示加載圖片*/
function displayAjaxLoading(element){
while(element.hasChildNodes()){
element.removeChild(element.lastChild);
}
var content=document.createElement("img");
content.setAttribute("src","images/loading.gif");
content.setAttribute("width","50px");
content.setAttribute("alt","Loading.....");
element.appendChild(content);
}

/* 表單-Ajax */
/*Ajax提交表單函數*/
function submitFormWithAjax(whichform,thetarget){
var request=getHTTPObject();
if(!request){return false;}
displayAjaxLoading(thetarget);
var dataParts=[];
var element;

for(var i=0;i<whichform.elements.length;i++){
element=whichform.elements[i];
dataParts[i]=element.name+'='+encodeURIComponent(element.value);
}

var data=dataParts.join('&');
request.open('POST',whichform.getAttribute("action"),true);
request.setRequestHeader("content-type","application/x-www-form-urlencoded");

request.onreadystatechange=function(){
if(request.readyState==4){
if(request.status==200||request.status==0){
var matches=request.responseText.match(/<article>([\s\S]+)<\/article>/);
if(matches.length>0){
thetarget.innerHTML=matches[1];
}else{
thetarget.innerHTML='<p>Oops, there was an error. Sorry.</p>';
}
}else{
thetarget.innerHTML='<p>'+request.statusText+'</p>';
}
}
}

request.send(data);
return true;

}

/* 表單準備函數 */
function prepareForms(){
for(var i=0;i<document.forms.length;i++){
var thisform=document.forms[i];
resetFields(thisform);
thisform.onsubmit=function(){
if(!validationForm(this)) return false;
var article=document.getElementsByTagName('article')[0];
if(submitFormWithAjax(this,article)) return false;
return true;
}
}
}

addLoadEvent(highlightPage);
addLoadEvent(prepareSlideshow);
addLoadEvent(prepareInternalnav);
addLoadEvent(preparePlaceholder);
addLoadEvent(prepareGallery);
addLoadEvent(stripeTables);
addLoadEvent(highlightRows);
addLoadEvent(displayAbbreviations);
addLoadEvent(focusLabels);
addLoadEvent(prepareForms);

JavaScript DOM 編程藝術(2版) 綜合實例Band js代碼的更多相关文章

  1. JavaScript DOM编程艺术(第2版)的简单总结

    介绍 JavaScript DOM编程艺术(第2版)主要讲述了 JavaScript.DOM 和 HTML5 的基础知识,着重讲述了 DOM 编程,并通过几个实例演示了具有专业水准的网页开发. 下面介 ...

  2. JavaScript DOM 编程艺术(第2版)读书笔记(1)

    JavaScript 简史 JavaScript 是Netscape公司与Sun公司合作开发的.在 JavaScript 1.0发布时,Netscape Navigator主宰着浏览器市场.微软在推出 ...

  3. 《JavaScript Dom编程艺术》(第二版)

    第一章<JavaScript简史> 1.JavaScript是一种脚本语言,通常只能通过Web浏览器去完成一些操作而不能像普通意义上的程序那样独立运行,它需要由Web浏览器进行解释和执行. ...

  4. 《JavaScript DOM 编程艺术(第2版)》读书笔记

    阅读了本书第五章关于使用JavaScript的最佳实践,大部分的建议之前都有耳闻,不过阅读之后有更深的体会. 1.防止滥用JavaScript “不管你想通过JavaScript改变哪个网页的行为,都 ...

  5. JavaScript DOM 编程艺术(第2版)读书笔记 (9)

    三位一体的网页 结构层:由HTML或XHTML之类的标记语言负责创建: 表示层:由CSS负责完成: 行为层:负责内容应该如何响应事件这一问题.这是由JavaScript语言和DOM主宰的领域. 分离 ...

  6. JavaScript DOM 编程艺术(第2版)读书笔记 (8)

    <!--这章的内容略奇怪啊!可能是因为我之前没有接触过这些知识点,等以后用到的时候再回来翻阅吧,现在先简要介绍一下 js权限已通过,博客园好快的效率啊,谢谢O(∩_∩)O --> 缩略语 ...

  7. JavaScript DOM 编程艺术(第2版)读书笔记 (7)

    动态创建标记 一些传统方法 document.write document.write()方法可以方便快捷的把字符串插入到文档里. 请把以下标记代码保存为一个文件,文件名就用test.html 好了. ...

  8. JavaScript DOM 编程艺术(第2版)读书笔记(5)

    最佳实践 平稳退化 网站的访问者完全有可能使用的是不支持Javascript的浏览器,还有一种可能是虽然浏览器支持Javascript,但用户已经禁用它了.如果没有考虑到这种情况,人们在访问你们的网站 ...

  9. JavaScript DOM 编程艺术(第2版)读书笔记(4)

    案例研究:JavaScript 图片库 改变图片的src属性的两种方式: 1,setAttribute方法是“第1级DOM”的组成部分,它可以设置元素节点的任意属性. 2,element.src = ...

随机推荐

  1. linux解压.tar.xz压缩包

    今天,打算更新一下node版本(v6.11.1 -> v8.9.4),结果阿里云服务器使用nvm命令下载慢如牛,于是直接在node官网找到合适的v8.9.4压缩包下载到电脑里,然后up到阿里云服 ...

  2. PMP备考指南之第二章:项目运作环境

    本文已同步至 GitHub/Gitee/公众号,感兴趣的同学帮忙点波关注~ 第二章:项目运作环境 1. 事业环境因素.组织过程资产 事业环境因素 Enterprise Environmental Fa ...

  3. CART树

    算法概述 CART(Classification And Regression Tree)算法是一种决策树分类方法. 它采用一种二分递归分割的技术,分割方法采用基于最小距离的基尼指数估计函数,将当前的 ...

  4. tcpdump非常实用的抓包实例

    详细的文档见tcpdump高级过滤技巧 基本语法 ========过滤主机--------- 抓取所有经过 eth1,目的或源地址是 192.168.1.1 的网络数据# tcpdump -i eth ...

  5. 鹅厂优文 | ReactJS一点通

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由鹅厂新鲜事儿发表于云+社区专栏 作者:卢文喆 腾讯云 UI工程师 导语 | 当React 刚开始红的时候,一直觉得 JSX 的设计思想 ...

  6. 前端富文本编辑器 vue-html5-editor

    1..项目创建与初始化 在安装好脚手架的依赖后,要执行 npm install vue-html5-editor -S 来安装这个富文本插件,由于这个富文本插件的图标是依赖font-awesome.c ...

  7. linux使用mail命令发送邮件

    在工作中使用linux,偶尔也会需要使用mail命令来进行发邮件.    从上面的命令看,系统已经安装了mail,对些我们还需要设置一下mail,让它使用外面的邮箱进行发邮件.设置文件是 /etc/m ...

  8. attempt to write a readonly database错误的解决(C#,SQLite)

    今天打包WPF程序,安装后总是打不开,查看监控日志原来是SQLite的问题,报错如图 当向SQLite数据库中存入新纪录时总是显示attempt to write a readonly a datab ...

  9. SQL——Sql_Server中如何判断表中某字段、判断表、判断存储过程以及判断函数是否存在

    一.比如说要判断表A中的字段C是否存在两个方法: (1) 直接查表——有点笨,有点常规 IF EXISTS ( SELECT 1 FROM SYSOBJECTS T1 INNER JOIN SYSCO ...

  10. 撩课-Web大前端每天5道面试题-Day25

    1.web前端开发,如何提高页面性能优化? 内容方面: .减少 HTTP 请求 (Make Fewer HTTP Requests) .减少 DOM 元素数量 (Reduce the Number o ...