热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

DOM脚本编程有关的问题:平稳退化、向后兼容、分离Javascript。一.平稳退化如果禁用了js后,基本功能可以实现吗?二.分离Javascript1.添加事件处理函数:a.检查

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文档的内容和结构。

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

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


推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
author-avatar
心醉逸轩_620
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有