《JavaScript DOM编程艺术(第2版)》笔记

码海寻云使
• 阅读 1560

《JavaScript DOM 编程艺术(第2版)》笔记

第1章:JavaScript 简史

  • JavaScript 的起源
JavaScript 是 Netscape 公司和 Sun 公司合作开发的。
  • DOM
DOM 是一套对文档的内容进行抽象和概念化的方法。
  • 浏览器战争
今天,几乎所有的浏览器都内置了对 DOM 的支持,只要遵循 DOM 标准,就可以放心大胆的去做。

第2章:JavaScript 语法

  • 语句

    建议在每条语句末尾都加上分号。
  • 注释

    // 单行注释
    /* 多行注释
       多行注释*/
  • 变量

    var mood = "happy";
    var age = 33;
  • 数据类型

    • 字符串
    • 数值
    • 布尔值
    • 数组

      • 数组
      • 关联数组
    • 对象
  • 操作符
    • 算术操作符

    + ,-,*,/,++,--,+=

    • 比较操作符

    >,=,<,>=,<=,==,!=,===.......

    ==并不表示严格相等,认为 false 与 "" 表示的含义相同。

    false == '';
    // true

    === 进行严格比较,不仅比较值,而且比较变量的类型。

    false === '';
    // false
    • 逻辑操作符
  • 条件语句和循环语句

    if (condions) {
        statemen}
    • while循环

      while (conditions) {
          statements;
      }
    • for 循环
  • 函数与对象

    • 函数:
    function name(arguments) {
        statements;
    }
    • 对象(object):
    对象是一种非常重要的数据类型。

对象的两种访问形式:

  • 属性 Object.property
  • 方法 Object.method()

    宿主对象:在Web应用中就是由浏览器提供的预定义对象。

第3章:DOM

DOM:

  • 文档:D (document)
  • 对象:O(object)

    • 用户定义对象
    • 内建对象:如 Array,Math,Data等。
    • 宿主对象:由浏览器提供的对象。
  • 模型: M(model)

节点(node):

  • 元素节点
  • 文本节点
  • 属性节点

获取元素:

  • getElementById
  • getElementsByTagName
  • getElementsByClassName

获取属性:

  • getAttribute

设置属性:

  • setAttribute

第4章:案例研究:JavaScript图片库

介绍了 DOM 提供的几个新属性:

  • childNodes
  • nodeType
  • nodeValue
  • firstChild
  • lastChild

第5章:最佳实战

平稳退化

平稳退化(graceful degradation):正确使用 JavaScript 脚本,可以让访问者在他们的浏览器不支持 JavaScript 的情况下仍然能顺利地浏览你的网站。

不能平稳退化会影响你的网页在搜索引擎上的排名。

  • "javascript:" 伪协议:这种做法非常不好

    • 真协议:用来在因特网上的计算机之间传输数据包,如HTTP协议(http://)、FTP协议(ftp://)等。
    • 伪协议:非标准化的协议。

      // 用"javascript:" 伪协议调用 popUp()函数:
      <a href="javascript:popUp('http://www.example.com/');">Example</a>
  • 内嵌的事件处理函数

    <a href="#" onclick="popUp('http://www.example.com/'); return false;">Example</a>

    非常不好,因为#只是创建了一个空链接。

  • 平稳退化办法:将 href 属性设置为真实存在的 URL 地址,让它成为一个有效的链接。

    <a href="http://www.example.com/" onclick="popUp(this.href); return false;">Example</a>

    这样,即使 javascript 被禁止,这个链接也是可用的。

渐进增强

渐进增强就是用一些额外的信息层去包裹原始数据。

按照“渐进增强”原则创建出来的网页几乎都符合“平稳退化”原则。

结构、样式、行为要分离。

向后兼容

  • 对象检测

    // 例如
    if (!document.getElementById) {
        return false;
    }
  • 浏览器嗅探技术

    通过提取浏览器供应商提供的信息来解决向后兼容问题。

性能考虑

  • 尽量少访问DOM和尽量减少标记
  • 合并和放置脚本

    • 推荐把 functionA.js,functionB.js,functionC.js合并到一个脚本文件中,这样可以减少加载页面时发送的请求数量。
    • <script>标签都放到文档的末尾</body>标记之前。因为位于<head>中的脚本会导致浏览器无法并行加载其他文件。
  • 压缩脚本

第6章:案例研究:图片库改进版

共享onload事件:addLoadEvent()函数

需要多个函数都在页面加载时执行。addLoadEvent只有一个参数:打算在页面加载完毕时执行的函数的名字。

  1. 把现有的 window.onload 事件处理函数的值存入变量 oldonload;
  2. 如果这个处理函数上还没有绑定任何函数,就像平时那样把新函数添加给它;
  3. 如果这个处理函数上已经绑定了一些函数,就把新函数追加到现有指令的末尾。
function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != "function") {
        window.onload = func;
    } else {
        window.onload = function (){
            oldonload();
            func();
        }
    }
}

第7章 动态创建标记

动态添加

注意:用document.createElement创建一个空白的p元素,想在p元素内部添加内容,实际上内容也是一个文本节点,所以应该document.createTextNode创建一个文本节点,再用.appendChild添加到p节点中。
window.onload = function () {
    var testdiv = document.getElementById("testdiv");
    var para = document.createElement("p"); // 创建 p 元素节点
    var txt1 = document.createTextNode("This is"); // 创建 文本节点
    var em = document.createElement("em"); // 创建 em 元素节点
    var txt2 = document.createTextNode("content."); // 创建 文本节点
    var txt3 = document.createTextNode("my "); // 创建 文本节点
    testdiv.appendChild(para); // 将 p 元素节点添加到 div 中
    para.appendChild(txt1); // 将文本节点添加到 p 元素中
    para.appendChild(em);
    para.appendChild(txt2);
    em.appendChild(txt3); // 将文本节点添加到 em 元素中
}

在现有元素后插入一个元素:insertAfter()函数

function insertAfter(newElement, targetElement) {
    var parent = targetElement.parentNode;
    if (parent.lastChild == targetElement) {
        parent.appendChild(newElement);
    } else {
        parent.insertBefore(newElement, targetElement.nextSibling);
    }
}

第8章:充实文档的内容

  • 把文档里的缩略语显示为一个“缩略语列表”
  • 为文档里引用的每段文献节选生成一个“文献来源链接”
  • 把文档所支持的快捷键线是位于分“快捷键清单”

第9章:CSS-DOM

给一个元素追加新的 class:

function addClass(element,value) {
    if (!element.className) {
        element.className = value;
    } else {
        newClassName = element.className;
        newClassName+= " ";
        newClassName+= value;
        element.className = newClassName;
    }
}

第10章 :用JavaScript实现动画效果

  • 位置position

    • static
    • fixed
    • relative
    • absolute
  • 时间

    • var variable = setTimeout("function",interval)
    • clearTimeout(variable)
  • parseInt把字符串里的数值信息提取出来

第11章:HTML5

  • canvas
  • 音频和视频
  • 表单

第12章:综合示例

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Karen110 Karen110
4年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
Wesley13 Wesley13
4年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
4年前
JavaScript DOM编程艺术(第2版)学习笔记1(1~4章)
第一章一些基本概念HTML(超文本标记语言),构建网页的静态结构,由一系列的DOM组成;CSS(层叠样式表),给网页各部分结构添加样式;JavaScript,通过获取DOM给静态结构加上动作,使用户能够与静态网页进行交互;DOM,一种API(应用程序接口),通过这个接口动态的访问和修改结构或样式。浏
Wesley13 Wesley13
4年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
4年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Python进阶者 Python进阶者
2年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这