我买的第20次印刷版本,读了一半了,书不错,不过发现了一些可以商榷的地方,说出来大家讨论。
1,82页~84页,6.3.2,共享onload事件 这一小节里作者编写了一个addLoadEvent函数来给onload添加事件,实际上DOM标准方法里有EventTarget.addEventListener()方法可以用来把事件注册到对象上,它有两个必要的参数,第一个是省略了on的事件名称字符串,第二个参数是事件处理函数,用这个方法就可以完成监听事件的任务而不用再构造书中的函数。IE9及以上支持这个方法。
这算是当时没有的方法现在有了更好的实现吧,我是先看了15年才出的一本js基础入门书(javascript高级程序设计里推荐的那本,好厚)才了解到的。
https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener
2,139页~141页,编写displayCitations函数的第一个步骤,“1,查找你的元素”这个章节,这里书中第一段就说,“……我想把“文献来源链接”放在blockquote元素所包含的最后一个子元素节点之后,……”,这个表述就问题,按照书上的描述,“文献来源链接”节点应该被放到blockquote元素包含的最后一个子元素节点(本例中是一个段落p节点)之后,即和p是兄弟节点的关系,都属于blockquote元素的子节点,这是不正确的,实际上这个“文献来源链接”是p元素的子节点,从本例最后的实践也可以证明,最后superscript(即包含了“文献来源链接”的sup元素)节点是成为了p元素节点的子节点的。所以正确的表述应该是:我想把“文献来源链接”添加成为blockquote元素所包含的最后一个子元素节点的子元素节点节点(blockquote元素的孙节点?)
并且,后面的实现方法也有问题,直接贴上源代码吧,简单起见删掉了注释和验证可用性的部分:
相关的html部分:
<blockquote cite="http://www.w3.org/DOM/">
<p>
A platform- and language-neutral interface that will allow programs
and scripts to dynamically access and update the
content, structure and style of documents.
</p>
</blockquote>
JS部分:
function displayCitations() {
var quotes = document.getElementsByTagName("blockquote");
for (var i=0; i<quotes.length; i++) {
var url = quotes[i].getAttribute("cite");
var quoteChildren = quotes[i].getElementsByTagName('*');
var elem = quoteChildren[quoteChildren.length - 1];
var link = document.createElement("a");
var link_text = document.createTextNode("source");
link.appendChild(link_text);
link.setAttribute("href",url);
var superscript = document.createElement("sup");
superscript.appendChild(link);
elem.appendChild(superscript);
}
}
要想证明这中实现方法有问题,只需要在html部分的p元素中随机添加一个<em>元素或者别的行内元素,那么js构造的sup元素就会错位,成为这个行内元素的子节点,原因是sup元素被添加成为了blockquote所有后代元素节点中的最后一个元素节点的子节点,注意我这里说的后代元素节点,而非子元素节点,我想每个人都明白差别。
至于怎么修正这个问题,我的思路是,查找blockquote元素的lastChild子节点赋给变量elem,验证它的nodeType属性值,如果等于3,则elem被重新赋予elem的previousSibling(往前一个兄弟节点)。完整的代码如下,同样删去了注释和可用性验证内容:
function displayCitations() {
var quotes = document.getElementsByTagName("blockquote");
for (var i=0; i<quotes.length; i++) {
var url = quotes[i].getAttribute("cite");
var elem = quotes[i].lastChild;
if(elem.nodeType == 3) elem=elem.previousSibling;
var link = document.createElement("a");
var link_text = document.createTextNode("source");
link.appendChild(link_text);
link.setAttribute("href",url);
var superscript = document.createElement("sup");
superscript.appendChild(link);
elem.appendChild(superscript);
}
}
先写这些,读完了再补充~
ps,尼玛我突然想到要是作者在书后修正了这个不那么完善的部分……
书是好书,不过有些地方值得商榷。
对“书是好书,不过有些地方值得商榷。”的回应
《JavaScript DOM编程艺术》热门书评
-
通往终点的过程与终点本身同样重要
116有用 7无用 cxa 2006-12-30
半年前,当我对JavaScript还停留在只认识这几个字母的时候,有一天我突然心血来潮,在网上下了DOM Scripting的样章,照着里面的例子写了我平生第一个能让我知所以然JavaScript,在浏览器运行成功,兴奋不已,从此能把学习编程的热情持续半年以上,破了过去只能热一两个星期的记录,它带给...
-
菜鸟读书笔记
28有用 1无用 |53/V> 2007-10-23
DOM模型——在dom模型中,文档是一棵树,文档元素、文本和属性都是节点——所有的属性节点都属于元素节点,文本节点是没有属性的——css样式本身不是节点,不过也采用了文档树的模型——dom的工作方式是先加载静态页面,再动态刷新,并不改变网页源码——在浏览器看来,dom节点树才是文档。我们不是在创建h...
-
我看《JavaScript DOM 编程艺术》
22有用 1无用 琳琳的小狗 2007-01-11
这本书在刚出版的时候,编辑就送了一本给我,可惜那段时间出差在外没能看到,真正到手是4号那天,之前一直关注china-pub上的评论,有网友评价说内容太肤浅,“大失所望,感觉象是喝了碗稀粥,一点实在货都没有”。的确,此书是我有史以来读得最快的一本,三百页,从4号晚上开始看,到第二天下午就看完了,说明写...
-
[第一版]初学者的摘录和感觉
6有用 0无用 银光 2013-02-17
这不是书评,是读第一遍的摘录。[读的是第一版的中文电子书]前言 这是一本讲述一种程序设计语言的书,但它也适合Web设计师阅读。具体地说,本书是为那些喜欢使用CSS和XHTML并愿意遵守编程规范的Web设计师们编写的。 第一章 JavaSc...
-
书名翻译成“编程艺术”有些过了
4有用 0无用 [已注销] 2011-07-01
原书标题并没有以The Art of...开头,翻译成JavaScript DOM编程艺术有些过了,它的定位显然应该是一本入门书籍,而不是TAOCP那样的“圣经”。这本书教会你如何用javascript操纵DOM树,使页面动态化。讲的东西比较杂,HTML5,CSS,AJAX以及各种历史,相比之下ja...
书名: JavaScript DOM编程艺术
作者: [英] Jeremy Keith
出版社: 人民邮电出版社
译者: 王建桥 | 杨涛 | 杨晓云
出版年: 2006年12月
页数: 316
定价: 39.00元
装帧: 简裝本
丛书: 图灵程序设计丛书·Web开发系列
ISBN: 9787115139214