JavaScript DOM编程艺术第二版-学习笔记

DOM的含义:Document(文档)、Object(对象)、Model(模型)

      这本书的第一遍算是看完了,主要讲了DOM语句的使用方法,涉及到结构行为样式的分离、向后兼容和平稳退化、动态创建标记、动画、网页加载性能优化还有一些实用案例等。其中还有些没太懂的地方,比如第七章提到的Ajax,以及第12章综合示例里用到Ajax的代码,回头再仔细看。只简单整理了前半部分图片库逐步改进的代码,最后的综合示例没有自己写,把源码copy来仔细看了下,太长,就不放在这了。

图片库最初版

HTML代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <title>Image Gallery</title>
  <script type="text/javascript" src="scripts/showPic.js"></script>
  <link rel="stylesheet" href="styles/layout.css" type="text/css" media="screen" />
</head>
<body>
  <h1>Snapshots</h1>
  <ul>
    <li>
      <a href="images/fireworks.jpg" title="A fireworks display" οnclick="showPic(this); return false;">Fireworks</a>
    </li>
    <li>
      <a href="images/coffee.jpg" title="A cup of black coffee" οnclick="showPic(this); return false;">Coffee</a>
    </li>
    <li>
      <a href="images/rose.jpg" title="A red, red rose" οnclick="showPic(this); return false;">Rose</a>
    </li>
    <li>
      <a href="images/bigben.jpg" title="The famous clock" οnclick="showPic(this); return false;">Big Ben</a>
    </li>
  </ul>
  <img id="placeholder" src="images/placeholder.gif" alt="my image gallery" />
  <p id="description">Choose an image.</p>
</body>
</html>
JS代码:

function showPic(whichpic) {
  var source = whichpic.getAttribute("href");
  var placeholder = document.getElementById("placeholder");
  placeholder.setAttribute("src",source);
  var text = whichpic.getAttribute("title");
  var description = document.getElementById("description");
  description.firstChild.nodeValue = text;
}
点击事件中的 return false 用来使a的默认链接地址不会再被触发。

改进版

让行为和样式分离,并加入平稳退化,考虑向后兼容,所以用if先进行事件检测。

HTML代码:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Image Gallery</title>
	<link rel="stylesheet" type="text/css" href="layout.css">
	<script type="text/javascript" src="showPic.js"></script>
</head>
<body>
	<h1>Snapshots</h1>
	<ul id="imagegallery">
		<li>
			<a href="img/gallery1.jpg" title="gallery1">
				<img src="img/gallery1.jpg">
			</a>
		</li>
		<li>
			<a href="img/gallery2.jpg" title="gallery2">
				<img src="img/gallery2.jpg">
			</a>
		</li>
		<li>
			<a href="img/gallery5.jpg" title="gallery3">
				<img src="img/gallery5.jpg">
			</a>
		</li>
		<li>
			<a href="img/gallery3.jpg" title="gallery4">
				<img src="img/gallery3.jpg">
			</a>
		</li>
	</ul>
<!-- 	<img id="placeholder" src="img/liuchutian3.jpg" alt="my image gallery">
<p id="description">Choose an image.</p> -->
</body>
</html>

注释部分注释掉之后,改为用JS函数动态创建标记。

JS代码:

//多个页面加载程序
function addLoadEvent(func){
	var oldοnlοad=window.onload;
	if(typeof window.onload !='function'){
		window.οnlοad=func;
	}else{
		window.οnlοad=function(){
			oldonload();
			func();
		};
	}
}
//在某个元素后面插入新元素
function insertAfter(newElement,targetElement){
	var parent=targetElement.parentNode;
	if (parent.lastChild==targetElement){
		parent.appentChild(newElement);
	}else{
		parent.insertBefore(newElement,targetElement.nextSibling);
	}
}
//创建显示部分并插入到点击列表的后面
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","img/liuchutian3.jpg");
	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);
}
//对每个链接添加点击事件
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 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;
}
addLoadEvent(preparePlaceholder);
addLoadEvent(prepareGallery);
        最后还有一个问题,Sublime text3 安装 SublimeLinter插件自动检查代码后,有时候会报error,但其实浏览器里运行是没问题的。不知道为什么,可能只是警告吧,以后可以用浏览器或其他编译器直接运行调试。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《JavaScript DOM编程艺术第二版是一本非常经典的前端开发书籍,由作者Jeremy Keith和Jeffrey Sambells合作编写而成。该书主要介绍了使用JavaScriptDOM技术进行网页开发的知识,涵盖了DOM操作、事件监听、表单验证、AJAX等内容。 本书首先讲解了DOM的基础知识,包括节点、元素、属性、文本等概念,并介绍了通过JavaScriptDOM进行操作的方法。然后,通过实例讲解了如何根据用户的交互行为来实现动态效果,如当用户点击某个按钮时改变网页的背景色等。 此外,本书还介绍了如何利用AJAX技术进行异步数据交互,比如通过JavaScript动态加载内容等。同时,本书也提供了一些工具和技巧来提高网页的性能和用户体验,比如浏览器兼容性、缓存、图片优化等。 总之,《JavaScript DOM编程艺术第二版是一本前端开发必读的书籍,可以帮助读者全面掌握JavaScriptDOM技术,在开发网页时提高效率和质量。而PDF版本的书籍更方便读者随时随地学习,建议前端开发人员可以认真阅读和应用到实践中。 ### 回答2: 《JavaScript DOM编程艺术第二版》是一本深入浅出的JavaScriptDOM编程入门书籍,适合初学者学习。 该书共有18章,从JavaScript基础语法和DOM结构开始讲起,一步步引导读者学习JavascriptDOM编程。其中介绍了文档对象模型(DOM)的概念、DOM节点、节点属性与操作等重要知识点,并通过实例和练习帮助读者更好地理解如何使用DOM进行网页设计和开发。此外,书中还介绍了如何使用JavaScript制作动态网页、表单验证、浏览器兼容性问题等实用的开发技巧,为读者提供了丰富的编程经验。 书中使用简洁易懂的语言,结合大量实例和练习,让读者可以快速掌握JavaScriptDOM的核心概念和编程技巧。作者还在书中提供了很多实战案例,让读者可以将所学的知识应用到实际开发中,并且让读者更好地理解如何进行项目开发。 总之,《JavaScript DOM编程艺术第二版》是一本不可多得的优秀JavaScriptDOM编程入门教材,读者只需要具备基本的JavaScript和HTML/CSS知识,即可轻松掌握书中内容,快速提高前端开发能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值