《JavaScript DOM高级程序设计》出版
2008年06月14日 原创, 翻译, 译作支持
【原 书 名】 AdvancED DOM Scripting:Dynamic Web Design Techniques
【原出版社】 friends of ED
【出 版 社】 人民邮电出版社
【出版日期】 2008 年7月
【页 码】 457
【定价】 59.00-75折价44.25
DOM(Document Object Model,文档对象模型)脚本编程经常会被误解为Web上的某种脚本编程,实际上,纯粹的DOM脚本编程只包括W3C DOM规范中所涵盖的特性和方法。也就是说,不包括任何专有浏览器的特性。在理想的世界里,我们可以遵循标准,忽略专有特性,最终完成可以在任何设备中运 行的脚本。但是,这不是一个理想的世界。众所周知,并非所有设备或浏览器都与W3C标准兼容,这就给像我们这样的开发者提出了问题:什么时候需要适应每一 种设备或浏览器,怎样才能保证忠实于W3C DOM?
当试图回答这些问题,以及在保持真正的DOM符合性基础上处理多浏览器时,我们萌生了写这本书的想法。本书不仅对以上问题给出了答案,而且还涉及到下列主题:
深入W3C DOM规范,并筛选出经常容易被误解的、仍然为非标准浏览器提供等价选项的细小问题。
进一步探讨新方法,例如Ajax客户端-服务器端通信,冲破Ajax的局限性以提供更具交互性的体验。
体验一些主要的第三方资源,通过它们省掉可观的日常工作量。
理解并创建自己日常所用的DOM方法库。
这 些能力的新发现也带来了许多诱惑。由于热衷于新特性而偏离了基本常识,导致Web应用程序设计模糊的DOM脚本编程的例子太多了。因而,纵贯全书作者都会 强调最佳实践的价值,并提供很多基于可用性和可访问性的解决方案,这样对最终用户和你--开发者或设计者而言,都是有益的。
你可以把这本书放在计算机旁作为参考,或者从头到尾读完它,这完全取决于你。无论采取哪种方式,只要你坚持学习完本书中的理论介绍、代码、例子和案例研究,就会深刻地发现自己已经很好地理解了书中那些高级概念的含义,不仅知其然,而且更知其所以然。
本书读者对象
本书适合对DOM感兴趣并希望进一步提升自己的所有Web开发者和设计者。通过本书通俗易懂的讲解,读者能够轻松地理解高级的DOM编程概念。如果读者对DOM脚本编程和Web标准有一些基本的经验,那么通过学习本书收获会更大。
本书组织方式
本书分为三个主要部分,通过学习全书内容,读者将能构建起属于自己的DOM实用方法库。书中的每一章都以前一章学习的概念为依托,因而本书的每一部分都是一个整体,每一章也并非完全独立。
第 一部分,“深入理解DOM脚本编程”,涉及W3C DOM规范的方方面面,包括非标准的浏览器支持和不支持的内容。从一开始就以最佳实践为榜样,然后你将了解到DOM2 HTML和DOM2核心规范,同时还有DOM2事件和DOM2样式规范。本部分中的每一章都会给出一些不针对特定浏览器(browser- agnostic)的例子。而且,你也将着手构建自己的脚本程序库,并往其中添加访问和操纵DOM、样式以及事件的各种方法。这些方法将不针对特定的浏览 器,因此你可以很容易地在公共方法(你将自己创建)的基础上建立自己的应用程序。第一部分最后的第六章将会完成一个案例学习,在这一章中,你将学会建立一 个交互式裁剪和调整图像大小的工具。
在介绍了操纵和访问文档的各个方面知识之后,第二部分,“浏览器外部通信”,将以Ajax和客户端- 服务器端通讯为主题。在这一部分中,作者没有停留在介绍简单的做法上,而是深入解释了相应的内部工作机制,同时,也没有忘记介绍整合Ajax 界面时可能遇到的麻烦。第二部分最后把这些技能用于实战检验,综合运用传统和当前的通讯方法,创建一个带有实时进度条的文件上传程序。
最 后,在第三部分,“部分高级脚本编程资源”中,作者集中介绍了一批第三方脚本编程资源,包括库和API(Application Programming Interfaces,应用程序编程接口)。你将在这一部分学习到如何利用主要的 DOM 脚本库来提高自己的开发效率,也包括使用一些视觉效果,为自己的 Web 应用程序添彩。同时,你还将学习如何通过可自由使用的API来整合交互式地图和项目管理工具。这些资源将为你提供高级编程能力,同时最大限度地减少你的重 复性工作--但只有在对第一和第二部分内容深入理解的基础上,才能更好地体会到这些资源的价值。本书以Aaron Gustafson撰写的一个案例学习作为结尾,这个案例把select元素提高到了一个全新的水平。
作者没有提供附录,而是向读者公布 了一个网站http://advanceddomscripting.com。在这个网站中,读者可以下载到本书的源代码和额外一些例子和参考文献。作者 将在这个网站中发布与DOM脚本编程相关的最新的重要消息,读者可以经常访问这个网站,以便与时俱进。

为之漫笔(李松峰),本博客专注于Web前后端技术、移动平台开发技术、交互设计和技术翻译。 
这本书也是等待很久的了, 卓越一有就买。
欢迎多提宝贵意见!
昨天逛书店看到了jquery那本,这本没看到。
其实我主要是看这本去了。
为什么每次的评论验证码都是v1cf?
补充一下,我的浏览器是opera。
可能是换模板造成的。
非常棒,预祝译作能大卖:)希望站长再接再厉,后续还有不少经典js书呢,嘿嘿……
btw,这次的验证码是“han4”,汗死?哈哈
嗯,有点奇怪,每个用户都给唯一验证码,这是始料不及的,呵呵~
第20页的
function exampleLibraryMethod(obj){
if(!(obj = $(obj))) return false;
return obj;
}
少了一个return obj;
第22页的中间的
//取消默认时间
ADS.eventPreventDefalut(W3CEvent)
是不是应该在eventPrevent中间有个”.”
ADS.event.preventDefalut(W3CEvent)
呵呵,不好意思,刚才没看下面了,一直在琢磨上面的代码。下面写清楚了这个函数在第四章添加了,呵呵,把这两条留言删掉吧,不好意思。
@ 小曾
没关系,这本书最近可能会重印(市面上好像不多了),如果有错误,还请及时反馈,多谢。
25页的这个函数insertAfter()
function insertAfter(node,referenceNode){
if(!(node=$(node))){ return false};
if(!(referenceNode=$(referenceNode))){ return false};
return referenceNode.parentNode.insertBefore(node,referenceNode.siblingNode);
}
我感觉它考虑到欠缺。如果是在parent里面只有一个子节点referenceNode,那么就不存在referenceNode.siblingNode,所以我觉得这里还要进行一下判断。
还有26页的
parent.firstChild.parentNode.removeChild(parent.firstChild);
为什么不直接用
parent.removeChild(parent.firstChild);
我试过两个的效果都一样啊
其中有什么深意吗?
望指点。
64页的中的
function doubleCheck() {
this.message = ‘Are you sure you want to leave?’;
}
doubleCheck.prototype.sayGoodbye = function() {
return confirm(this.message);
}
initPage() {
var clickedLink = new doubleCheck();
var links = document.getElementsByTagName(‘a’);
for (var i=0 ; i<links.length ; i++) {
ADS.addEvent(links[i], 'click', clickedLink.sayGoodbye);
}
}
ADS.addEvent(window,'load',initPage);
其中
initPage(){
}
这个函数的写法不规范,应该改一下。
@ 小曾
非常抱歉,最近特特特忙。所以,能不能把这些“读书笔记”式的疑问整理出来,通过邮件一块发给我(邮件地址见译者序),等我有时间再集中回复你,OK?
好的,没问题,一切听峰哥指挥!