《Javascript DOM编程艺术》--第六章案例研究图片库改进版

DOM脚本编程有关的问题:平稳退化、向后兼容、分离Javascript。

一. 平稳退化

  如果禁用了js后,基本功能可以实现吗?

二. 分离Javascript

1. 添加事件处理函数:

  a. 检查点:普通适用性检测(检测是否支持DOM方法);针对性检测(检测对象是否存在)

    这是预防性措施。即使以后决定从网页上删除某个标记,也不用担心js报错。此时,体现了js与html分离的重要性。

    原则:想用js给网页添加行为,就不应该让js代码对这个网页的结构有任何依赖。

  b. 变量名:保留字和关键字不能用做变量名。

  c. 遍历:

  d. 改变行为:通过document.getElementsByTagName()方法得到的数组其实是节点列表,是一个由DOM节点构成的集合,这个集合里每个节点都有自己的属性和方法。

2. 共享onload事件:在网页加载完毕之后立即执行,这个事件与window对象相关。原则:如果把几个函数绑定到onload事件上,它们当中只有最后一个函数会被执行(被覆盖掉了)。

  解决办法一:window.onload = function(){ fn1(); fn2(); ...... }     ---------适用于需要绑定的函数不是很多的场合

  解决办法二:封装一个函数 addLoadEvent,只有一个参数即打算在页面加载完毕时执行的函数的名字。

        function addLoadEvent(func) {

          var oldonload = window.onload;

          if ( typeof oldonload != "function" ){

            window.onload = func;

           }else {

            window.onload = function(){

              oldonload();

              func();

            };

           };

        };

三. 不要做太多的假设:

1. 三元操作符:

2. nodeName属性:总是返回一个大写字母的值,即使元素在HTML文档里是小写字母。

实际工作中,要决定是否需要检查,因为这些检查针对的是HTML文档有可能不在你控制范围内的情况。理想情况下,你的脚本不应该对HTML文档的内容和结构做太多的假设。

四. 键盘访问:

onkeypress事件处理函数是专门用来处理键盘事件的,按下键盘上任何一个按键都会触发onkeypress事件。在某些浏览器里,甚至包括tab键。

在几乎所有浏览器里,用tab键移动到某个链接然后按下回车键也会触发onclick事件。

五. DOM Core 和 HTML-DOM:

1. DOM Core:并不专属于js,支持DOM的任何一种程序设计语言都可以使用它们。用途也并非仅限于处理网页,它们可以用来处理用任何一种标记语言(比如XML)编写出来的文档。

2. HTML-DOM:只能用来处理web文档。

a. 比如HTML-DOM提供了一个forms对象:document.forms

b. 提供了许多描述各种HTML元素的属性:ele.src

同样的操作既可以只使用DOM Core来实现,也可以使用HTML-DOM来实现。

小结:

1. 尽量让js代码不再依赖于没有保证的假设,为此引入许多项测试和检查。这些使js代码可以平稳退化。

2. 没有使用onkeypress事件处理函数,这使js代码的可访问性得到了保证。

3. 重要的是将js代码从HTML标记文档分离,使js代码不再依赖于HTML文档的内容和结构。

结构与行为的分离程度越大越好!

时间: 2024-11-05 14:46:41

《Javascript DOM编程艺术》--第六章案例研究图片库改进版的相关文章

JavaScript Dom编程艺术 第6章的一个错误

今天在看JavaScript Dom编程艺术 第6章:图片库的改进版时:按照书上的代码,敲出来运行,确怎么也不能显示出正确的结果.加进去断点,调试,发现:prepareGallery 函数根本没被调用,而prepareGallery函数是绑定到window.onLoad事件上的,于是仔细检查书上代码,发现,window.onLoad = prepareGallery;后边少加了个括号.加上括号之后,结果正确.改正后的代码如下: 1 function addLoadEvent(func){ 2 v

javascript DOM编程艺术 第10章问题记录

为什么moveElement函数调用时,必须加字符串的拼接符 var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")"; // var repeat = "moveElement('"elementID"',"final_x","final_y&

JavaScript DOM编程艺术第一章:JavaScript简史

本系列的博客是由本人在阅读<JavaScript DOM编程艺术>一书过程中做的总结.前面的偏理论部分都是书中原话,觉得有必要记录下来,方便自己翻阅,也希望能为读到本博客的人提供一些帮助,所以 如果您也看过这本书,希望不要喷小的"抄袭",其实我也懒得敲这些文字也想简单粗暴地上代码,但是只有实践没有理论不容易自己理解,为避免误导,该"抄"的地方还是要"抄"的,哈哈~~ 一.JavaScript的起源 JavaScript是Netscap

《javascript dom编程艺术》笔记(一)——优雅降级、向后兼容、多个函数绑定onload函数

刚刚开始自学前端,如果不对请指正:欢迎各位技术大牛指点. 开始学习<javascript dom编程艺术>,整理一下学习到的知识.今天刚刚看到第六章,记下get到的几个知识点. 优雅降级 看到版本翻译为预留退路,刚刚看到个名词,我觉得很奇怪,以前没有听说过啊.不过看到英文注释就知道了Graceful degradation不就是优雅降级么,听说过! 书中举了个例子,点击一个链接,弹出一个窗口的方法. function popUp(WinURL){ window.open(WinURL,&quo

《javascript DOM 编程艺术》学习笔记(一)

书籍已经看完了前六章的内容,有了一定的编程基础后觉得本书内容相对来说过于简单,应该是完全针对于初学者的(或者如作者所说是写个Web设计师的),作者在表述一个问题,一句代码都解释得非常啰嗦与重复,不过从书中学习到更多的,也是作者想让读者体会的是让大家理解DOM脚本编程技术背后的思路和原则,作者特别以早期Javascript的滥用来强调Web的规范与标准,这一点是非常值得学习的,也是一个程序员的基本素养. 截止到第六章,将所学到的知识点归纳如下: 1.基本语法:与php一样是弱类型语言,虽然功能强大

JavaScript DOM编程艺术 读书笔记

3 DOM DOM分别指document,object和model. DOM中包含的节点主要分为三种:元素节点.文本节点和属性节点.DOM的原子是元素节点,标签的名字就是元素的名字,元素可以包含其他的元素.没有被包含在其他元素里的唯一元素是<html>元素,它是树节点的根元素:在XHTML文档里,文本节点总是被包含在元素节点的内部.但并非所有的元素节点都包含有文本节点:属性节点用来对元素做出更具体地描述. 有3种DOM方法可获取元素节点,分别是通过元素ID.通过标签名字和通过类名字来获取. 1

JavaScript对于DOM的常见操作——《JavaScript DOM编程艺术》读书总结

读完一本书一定要将收获进行整理沉淀,不然相当于白读.<JavaScript DOM编程艺术>的确是一本JavaScript好的入门书,简短精炼,现在就用一篇文章对本书中的一些知识要点进行总结. 首先要明白的一件事就是什么是DOM.DOM即文档对象模型(Document Object Model),document指的就是网页文档,而Object,在JavaScript中共有三种对象,分别是用户定义对象.内建对象(Array.Date和Math等)以及宿主对象(由浏览器提供的对象).而Model

《JavaScript dom 编程艺术》 placeholder占位符IE8兼容办法。

在<JavaScript dom 编程艺术>第11章学来的. 相对于用JavaScript替换文本框的提示语句 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 <script> 7 window.onload = funct

《JavaScript DOM 编程艺术》(第二版)读书笔记(三)

第六章 案例研究:图片库改进版 这一章将根据第五章提到的内容对图片库进行了改进 首先检查DOM方法是否被游览器支持 if(!document.getElementById) return false; if(!document.getElementsByTagName) return false; if(!document.getElementById("placeholder")) //.......类似的测试 接下来讲到了一个重点内容:共享onload事件 JavaScript往往