zoukankan      html  css  js  c++  java
  • JavaScript DOM 编程艺术 笔记

    很久之前看的 存个笔记

    JavaScript DOM 编程艺术 笔记

    DOM

    什么是DOM?

    DOM是一套对文档的内容进行抽象和概念化的方法。

    DOM是一种API(应用编程接口) [API就是一组已经得到有关各方共同认可的基本决定]

    DOM工作模式

    先加载文档的静态内容 再动态刷新 动态刷新不影响文档的静态内容

    对页面内容进行刷新却不需要在浏览器里刷新页面

    DHTML

    DHTML Dynamic HTML 动态HTML

    描述HTML CSS JavaScript技术组合的术语

    强类型和弱类型语言

    强类型语言 strongly typed

    必须明确类型声明的语言

    弱类型语言 weakly typed

    不需要进行类型声明 这意味着程序员可以在任何阶段改变变量的数据类型

    数组

    var arr = Array(2) //2为长度

    var arr = Array() //不知道长度可以不指定

    arr[0]='hello'

    arr[1]='world'

    arr[1]='!'

    var arr = Array('hello','world','!' ) // 也可以直接填充数组

    条件语句

    conditional statement

    if(conditional){
    statements
    }

    如果if语句中的花括号部分只包含一条语句 那就可以不适用花括号

    if(1<2) alert('22222');

    if(false == " ") //true 相等操作符认为空字符串和false含义相等

    所以再比较的时候就要使用 ===

    var

    如果在某个函数中使用了var 那么这个变量将被视为一个局部变量

    如果没有使用var 那么这个变量将被视为一个全局变量

    如果脚本里已经存在一个与之同名的全局变量 那么这个函数就会改变那个全局变量的值

    对象

    包含在对象里的数据 可以通过两种形式访问

    属性和方法

    属性是隶属于某个特定对象的变量

    方法是只有某个特定对象才能调用的函数

    宿主对象 host Object

    是由运行环境提供的 from image element

    childNodes

    在一颗节点树上,childNodes属性可以用来获取任何一个元素的所有子元素(空格和换行符都会被包括,都是节点),它是一个包含这个元素全部子元素的数组

    访问childNodes数组的第一个元素

    node.childNodes[0] -> firstChild

    最后一个元素

    node.childNodes[node.childNodes.length-1] -> lastChild

    nodeType

    每一个节点都有一个nodeType属性

    node.nodeType=1/2/3

    1:元素节点

    2:属性节点

    3:文本节点

    nodeValue

    改变一个文本节点的值

    node.nodeValue

    不仅可以用来检索节点的值 还可以设置节点的值

    nodeName

    总是返回一个大写字母的值

    onkeypress

    按下键盘任意一个按键都会触发该事件

    onclick

    用tab键移动到某个链接然后按下回车的动作也会触发onclick事件

    弹窗问题

    应该只在绝对必要的情况下才使用弹出窗口 因为这牵扯到网页的可访问性

    window.open()

    JavaScript使用window对象的open方法来创建新的浏览器窗口

    window.open(url,name,feature)

    url : 想在新窗口打开的网页的url地址 如果不写则弹出一个空白的浏览器窗口

    name:新窗口的名字 可以在代码里通过这个名字来与新窗口进行通信

    feature : 是一个以逗号分隔的字符串 内容是新窗口的各种属性

    ​ 新窗口的大小(宽高) 新窗口被启用或被禁用的各种浏览功能(工具条、菜单条、初始显示位置等) 新窗口的功能要少而精

    这个方法对DOM没有影响

    伪协议

    pseudo-protocal

    真协议用来在因特网上的计算机之间传输数据包 如HTTP,FTP等

    伪协议则是一种非标准化的协议

    JavaScript伪协议让我们通过一个链接来调用JavaScript函数

    平稳退化

    graceful degradation

    网站的访问者可能禁用了JavaScript或者是浏览器不支持,在访问网站时就可能遇到各种麻烦,所以需要正确使用JavaScript,在不支持的情况下仍然能正常访问. 这就是所谓的平稳退化.

    如果JavaScript网页不能平稳退化 这将在搜索引擎上排名受到极大损害

    向后兼容

    解决方案:

    把某个方法打包在一个if语句里 就可以根据这条if语句的条件表达式的求值结果: true 这个方法存在 false 这个方法不存在 来决定采取怎样的行动

    这种检测方法被称为: 对象检测(object detection)

    在使用对象检测时 一定要删除方法名后面的括号

    如果不删除 测试的方法将会是结果 无论方法是否存在

    性能考虑

    尽量少访问DOM和尽量减少标记

    1.

    访问DOM的方式对脚本性能会产生非常大的影响

    因为只要是查询DOM的某些元素 浏览器都会搜索整个DOM树

    从中查找可能匹配的元素

    最好的方法是把第一次搜索的结果保存在一个变量中 然后重用

    2.

    同时还要尽量减少文档中的标记数量 过多不必要的元素只会增加DOM树的规模 进而增加遍历DOM树以查找特定元素的时间

    3.

    同时还要尽量合并脚本文件 减少加载页面时发送的请求数量

    减少请求数量通常都是在性能优化时首先要考虑的

    4.

    脚本在标记中的位置对页面初次的加载时间也有很大影响

    位于块中脚本会导致浏览器无法并行加载其他的文件(如图像或其他脚本文件)

    根据HTTP规范 浏览器每次从一个域名中最多只能同时下载个文件

    而在下载脚本期间 浏览器不会下载其他任何文件

    即使是来自不同域名的文件也不会下载 所有的资源都要等待脚本文件加载完成后才能下载

    解决方法

    把所有的

    Modernzr兼容性检查
    inputtypes.type

    检查浏览器是否支持某个输入类型的控件

    if(!Modernizr.inputtypes.date)

    input.attribute

    if(!Modernizr.input.placeholder)

    在样式表中导入样式表css

    @import url(base.css)

    可以把样式表都汇总到一个总的样式表

    为了减少请求的数量就需要把所有的样式都汇总到一个样式表中,

    这样也有助于最后缩减代码

    indexof

    indexof方法用于在字符串中寻找子字符串的位置

    返回子字符串第一次出现的位置

    如果没有匹配到返回-1

    返回其他值则为匹配

    split方法

    根据分隔符把一个字符串分成两或多部分的一种便捷方式

    string.split(separator,howmany)

    separator 必须/字符串或正则表达式,从该参数指定的地方分割string

    howmany 可选/该参数可指定返回数组的最大长度

    ​ 如果设置则按照要求不会超出 如果没设置则会整个字符串都会被分割 不考虑长度

    返回值

    一个字符串数组

    通过separator指定的边界处将字符串string分割成子串创建的

    返回的数组中的字符串不包括separator自身

    form对象-elements

    HTML文档中每个元素都是一个对象

    文档中每一个表单都是form对象

    每个form对象都有一个elements.length属性

    这个属性返回表单中的包含的表单元素的个数

    相应的,表单中所有字段都保存在form对象的elements属性中。

    即: form.elements 是一个包含所有表单元素的数组

    elements数组只返回input、select、textarea

    BOM

    window对象对应着浏览器窗口本身 这个对象的属性或方法通常统称为

    BOM 浏览器对象模型

  • 相关阅读:
    行转列,列转行
    聚合函数:sum,count,max,avg
    row_number() over partition by 分组聚合
    mysql优化
    hive中not in优化
    DBCP数据库连接池的简单使用
    Eclipse或MyEclipse中给第三方jar包添加源码步骤
    Java中CountDownLatch类的使用
    PLSQL Developer安装、配置、连接oracle数据库
    oracle11g卸载(win10)
  • 原文地址:https://www.cnblogs.com/liyf-98/p/14471496.html
Copyright © 2011-2022 走看看