web前端笔试题面试题汇总+前端优化总结

上传人:gbs****77 文档编号:12962433 上传时间:2020-06-04 格式:DOCX 页数:43 大小:968.37KB
返回 下载 相关 举报
web前端笔试题面试题汇总+前端优化总结_第1页
第1页 / 共43页
web前端笔试题面试题汇总+前端优化总结_第2页
第2页 / 共43页
web前端笔试题面试题汇总+前端优化总结_第3页
第3页 / 共43页
点击查看更多>>
资源描述
前端是庞大的 包括 HTML CSS Javascript Image Flash 等等各种各样的资源 前端优化是复杂的 针对方方面面的资源都有不同的方式 那么 前端优化的目的是什么 1 从用户角度而言 优化能够让页面加载得更快 对用 户的操作响应得更及时 能够给用户提供更为友好的体验 2 从服务商角度而言 优化能够减少页面请求数 或者 减小请求所占带宽 能够节省可观的资源 总之 恰当的优化不仅能够改善站点的用户体验并且能 够节省相当的资源利用 前端优化的途径有很多 按粒度大致可以分为两类 第 一类是页面级别的优化 例如 HTTP 请求数 脚本的无阻塞 加载 内联脚本的位置优化等 第二类则是代码级别的优化 例如 Javascript 中的 DOM 操作优化 CSS 选择符优化 图片 优化以及 HTML 结构优化等等 另外 本着提高投入产出比 的目的 后文提到的各种优化策略大致按照投入产出比从大 到小的顺序排列 一 页面级优化 1 减少 HTTP 请求数 这条策略基本上所有前端人都知道 而且也是最重要最 有效的 都说要减少 HTTP 请求 那请求多了到底会怎么样 呢 首先 每个请求都是有成本的 既包含时间成本也包含 资源成本 一个完整的请求都需要经过 DNS 寻址 与服务器 建立连接 发送数据 等待服务器响应 接收数据这样一个 漫长 而复杂的过程 时间成本就是用户需要看到或者 感受 到这个资源是必须要等待这个过程结束的 资源上由于每个 请求都需要携带数据 因此每个请求都需要占用带宽 另外 由于浏览器进行并发请求的请求数是有上限的 具体参见此 处 因此请求数多了以后 浏览器需要分批进行请求 因 此会增加用户的等待时间 会给用户造成站点速度慢这样一 个印象 即使可能用户能看到的第一屏的资源都已经请求完 了 但是浏览器的进度条会一直存在 减少 HTTP 请求数的主要途径包括 1 从设计实现层面简化页面 如果你的页面像百度首页一样简单 那么接下来的规则 基本上都用不着了 保持页面简洁 减少资源的使用时最直 接的 如果不是这样 你的页面需要华丽的皮肤 则继续阅 读下面的内容 2 合理设置 HTTP 缓存 缓存的力量是强大的 恰当的缓存设置可以大大的减少 HTTP 请求 以有啊首页为例 当浏览器没有缓存的时候访 问一共会发出 78 个请求 共 600 多 K 数据 如图 1 1 而当 第二次访问即浏览器已缓存之后访问则仅有 10 个请求 共 20 多 K 数据 如图 1 2 这里需要说明的是 如果直接 F5 刷 新页面的话效果是不一样的 这种情况下请求数还是一样 不过被缓存资源的请求服务器是 304 响应 只有 Header 没 有 Body 可以节省带宽 怎样才算合理设置 原则很简单 能缓存越多越好 能 缓存越久越好 例如 很少变化的图片资源可以直接通过 HTTP Header 中的 Expires 设置一个很长的过期头 变化不频繁 而又可能会变的资源可以使用 Last Modifed 来做请求验证 尽可能的让资源能够在缓存中待得更久 关于 HTTP 缓存的 具体设置和原理此处就不再详述了 有兴趣的可以参考下列 文章 HTTP1 1 协议中关于缓存策略的描述 Fiddler HTTP Performance 中关于缓存的介绍 3 资源合并与压缩 如果可以的话 尽可能的将外部的脚本 样式进行合并 多个合为一个 另外 CSS Javascript Image 都可以用相应 的工具进行压缩 压缩后往往能省下不少空间 4 CSS Sprites 合并 CSS 图片 减少请求数的又一个好办法 5 Inline Images 使用 data URL scheme 的方式将图片嵌入到页面或 CSS 中 如果不考虑资源管理上的问题的话 不失为一个好办法 如果是嵌入页面的话换来的是增大了页面的体积 而且无法 利用浏览器缓存 使用在 CSS 中的图片则更为理想一些 6 Lazy Load Images 这条策略实际上并不一定能减少 HTTP 请求数 但是却 能在某些条件下或者页面刚加载时减少 HTTP 请求数 对于 图片而言 在页面刚加载的时候可以只加载第一屏 当用户 继续往后滚屏的时候才加载后续的图片 这样一来 假如用 户只对第一屏的内容感兴趣时 那剩余的图片请求就都节省 了 有啊首页曾经的做法是在加载的时候把第一屏之后的图 片地址缓存在 Textarea 标签中 待用户往下滚屏的时候才 惰性 加载 2 将外部脚本置底 前文有谈到 浏览器是可以并发请求的 这一特点使得 其能够更快的加载资源 然而外链脚本在加载时却会阻塞其 他资源 例如在脚本加载完成之前 它后面的图片 样式以 及其他脚本都处于阻塞状态 直到脚本加载完成后才会开始 加载 如果将脚本放在比较靠前的位置 则会影响整个页面 的加载速度从而影响用户体验 解决这一问题的方法有很多 在这里有比较详细的介绍 这里是译文和更详细的例子 而 最简单可依赖的方法就是将脚本尽可能的往后挪 减少对并 发下载的影响 3 异步执行 inline 脚本 inline 脚本对性能的影响与外部脚本相比 是有过之而 无不及 首页 与外部脚本一样 inline 脚本在执行的时候 一样会阻塞并发请求 除此之外 由于浏览器在页面处理方 面是单线程的 当 inline 脚本在页面渲染之前执行时 页面 的渲染工作则会被推迟 简而言之 inline 脚本在执行的时 候 页面处于空白状态 鉴于以上两点原因 建议将执行时 间较长的 inline 脚本异步执行 异步的方式有很多种 例如 使用 script 元素的 defer 属性 存在兼容性问题和其他一些问 题 例如不能使用 document write 使用 setTimeout 此外 在 HTML5 中引入了 Web Workers 的机制 恰恰可以解决此 类问题 4 Lazy Load Javascript 随着 Javascript 框架的流行 越来越多的站点也使用起 了框架 不过 一个框架往往包括了很多的功能实现 这些 功能并不是每一个页面都需要的 如果下载了不需要的脚本 则算得上是一种资源浪费 既浪费了带宽又浪费了执行花费 的时间 目前的做法大概有两种 一种是为那些流量特别大 的页面专门定制一个专用的 mini 版框架 另一种则是 Lazy Load YUI 则使用了第二种方式 在 YUI 的实现中 最初只 加载核心模块 其他模块可以等到需要使用的时候才加载 5 将 CSS 放在 HEAD 中 如果将 CSS 放在其他地方比如 BODY 中 则浏览器有可 能还未下载和解析到 CSS 就已经开始渲染页面了 这就导致 页面由无 CSS 状态跳转到 CSS 状态 用户体验比较糟糕 除 此之外 有些浏览器会在 CSS 下载完成后才开始渲染页面 如果 CSS 放在靠下的位置则会导致浏览器将渲染时间推迟 6 异步请求 Callback 在某些页面中可能存在这样一种需求 需要使用 script 标签来异步的请求数据 类似 Javascript Callback 函数 function myCallback info do something here HTML cb 返回的内容 myCallback Hello world 像以上这种方式直接在页面上写 对页面的性能也 是有影响的 即增加了页面首次加载的负担 推迟了 DOMLoaded 和 window onload 事件的触发时机 如果时效性 允许的话 可以考虑在 DOMLoaded 事件触发的时候加载 或者使用 setTimeout 方式来灵活的控制加载的时机 7 减少不必要的 HTTP 跳转 对于以目录形式访问的 HTTP 链接 很多人都会忽略链 接最后是否带 假如你的服务器对此是区别对待的话 那 么你也需要注意 这其中很可能隐藏了 301 跳转 增加了多 余请求 具体参见下图 其中第一个链接是以无 结尾的方 式访问的 于是服务器有了一次跳转 8 避免重复的资源请求 这种情况主要是由于疏忽或页面由多个模块拼接而成 然后每个模块中请求了同样的资源时 会导致资源的重复请 求 二 代码级优化 1 Javascript 1 DOM DOM 操作应该是脚本中最耗性能的一类操作 例如增 加 修改 删除 DOM 元素或者对 DOM 集合进行操作 如果 脚本中包含了大量的 DOM 操作则需要注意以下几点 a HTML Collection 在脚本中 document images document forms getElementsByTagName 返回的都是 HTMLCollection 类型的集合 在平时使用的时 候大多将它作为数组来使用 因为它有 length 属性 也可以 使用索引访问每一个元素 不过在访问性能上则比数组要差 很多 原因是这个集合并不是一个静态的结果 它表示的仅 仅是一个特定的查询 每次访问该集合时都会重新执行这个 查询从而更新查询结果 所谓的 访问集合 包括读取集合的 length 属性 访问集合中的元素 因此 当你需要遍历 HTML Collection 的时候 尽量将它 转为数组后再访问 以提高性能 即使不转换为数组 也请 尽可能少的访问它 例如在遍历的时候可以将 length 属性 成员保存到局部变量后再使用局部变量 b Reflow 代码块的行为实际上是修改了代码块中 的执行环境 将 obj 放在了其作用域链的最前端 在 with 代 码块中访问非局部变量是都是先从 obj 上开始查找 如果没 有再依次按作用域链向上查找 因此使用 with 相当于增加 了作用域链长度 而每次查找作用域链都是要消耗时间的 过长的作用域链会导致查找性能下降 因此 除非你能肯定在 with 代码中只访问 obj 中的属性 否则慎用 with 替代的可以使用局部变量缓存需要访问的属 性 3 避免使用 eval 和 Function 每次 eval 或 Function 构造函数作用于字符串表示的源 代码时 脚本引擎都需要将源代码转换成可执行代码 这是 很消耗资源的操作 通常比简单的函数调用慢 100 倍以 上 eval 函数效率特别低 由于事先无法知晓传给 eval 的 字符串中的内容 eval 在其上下文中解释要处理的代码 也 就是说编译器无法优化上下文 因此只能有浏览器在运行时 解释代码 这对性能影响很大 Function 构造函数比 eval 略好 因为使用此代码不会影 响周围代码 但其速度仍很慢 此外 使用 eval 和 Function 也不利于 Javascript 压缩工 具执行压缩 4 减少作用域链查找 前文谈到了作用域链查找问题 这一点在循环中是尤其 需要注意的问题 如果在循环中需要访问非本作用域下的变 量时请在遍历之前用局部变量缓存该变量 并在遍历结束后 再重写那个变量 这一点对全局变量尤其重要 因为全局变 量处于作用域链的最顶端 访问时的查找次数是最多的 低效率的写法 全局变量 var globalVar 1 function myCallback info for var i 100000 i 每次访问 globalVar 都需要查找到作用域链最顶端 本例中需要访问 100000 次 globalVar i 更高效的写法 全局变量 var globalVar 1 function myCallback info 局部变量缓存全局变量 var localVar globalVar for var i 100000 i 访问局部变量是最快的 localVar i 本例中只需要访问 2 次全局变量 globalVar localVar 此外 要减少作用域链查找还应该减少闭包的使用 5 数据访问 Javascript 中的数据访问包括直接量 字符串 正则表达 式 变量 对象属性以及数组 其中对直接量和局部变量 的访问是最快的 对对象属性以及数组的访问需要更大的开 销 当出现以下情况时 建议将数据放入局部变量 a 对任何对象属性的访问超过 1 次 b 对任何数组成员的访问次数超过 1 次 另外 还应当尽可能的减少对对象以及数组深度查找 6 字符串拼接 在 Javascript 中使用 号来拼接字符串效率是比较低的 因为每次运行都会开辟新的内存并生成新的字符串变量 然 后将拼接结果赋值给新变量 与之相比更为高效的做法是使 用数组的 join 方法 即将需要拼接的字符串放在数组中最后 调用其 join 方法得到结果 不过由于使用数组也有一定的开 销 因此当需要拼接的字符串较多的时候可以考虑用此方法 关于 Javascript 优化的更详细介绍请参考 Write Efficient Javascript PPT Efficient JavaScript 2 CSS 选择符 在大多数人的观念中 都觉得浏览器对 CSS 选择符的解 析式从左往右进行的 例如 toc A color 444 这样一个选择符 如果是从右往左解析则效率会很高 因为第一个 ID 选择基本上就把查找的范围限定了 但实际 上浏览器对选择符的解析是从右往左进行的 如上面的选择 符 浏览器必须遍历查找每一个 A 标签的祖先节点 效率并 不像之前想象的那样高 根据浏览器的这一行为特点 在写 选择符的时候需要注意很多事项 有人已经一一列举了 详 情参考此处 3 HTML 对 HTML 本身的优化现如今也越来越多的受人关注了 详情可以参见这篇总结性文章 4 Image 压缩 图片压缩是个技术活 不过现如今这方面的工具也非常 多 压缩之后往往能带来不错的效果 具体的压缩原理以及 方法在 Even Faster Web Sites 第 10 章有很详细的介绍 有兴趣的可以去看看 总结 本文从页面级以及代码级两个粒度对前端优化的各种方 式做了一个总结 这些方法基本上都是前端开发人员在开发 的过程中可以借鉴和实践的 除此之外 完整的前端优化还 应该包括很多其他的途径 例如 CDN Gzip 多域名 无 Cookie 服务器等等 由于对于开发人员的可操作性并不强大 在此也就不多叙述了 详细的可以参考 Yahoo 和 Google 的 这些 金科玉律 1 Javascript 简介 HTML 是纯静态的的页面 而 Javascript 让页面有了动态的效 果 比如 OA 中模块的拖拉 所有的浏览器都会内置 Javascript 的解释器 1992 年 Nombas 公司开发出 C 减减的嵌入式脚本语言 这 是最好的 HTML 页面的脚本语言 Netscape 为了扩展其浏览器的功能 开发了一套 LiveScript 并与 1995 年与 SUN 公司联合把其改名为 javascript 它的主要 目的是处理一些输入的有效性验证 而之前这个工作是留给 perl 之类的服务器端语言完成 在以前使用电话线调制解调 器 28 8kb s 的时代 如此慢的与服务器交互 这绝对是一件 很痛苦的事情 Javascript 的出现 解决了这个问题 因为它 的验证是基于客户端的 微软公司早期版本的浏览器仅支持自己的 vbscript 但后来 不得不加入 javascript IE3 中搭载 Javascipt 的克隆版本 命名为 jscript 在一次技术会议中 sun microsoft netscape 公司联合制定 了 ECMA Script 标准 在 2005 前 网页上提示框 广告越来越多 把 javascipt 滥 用 使 javascript 背上了大量的罪名 2005 年 google 公司的网上产品 google 地图 gmail google 搜索建议 等使得 ajax 兴起 而 javascript 便 是 ajax 最重要的元素之一 Javascript 有三个部分组成 ECMAScript DOM BOM WEB 标准 网页主要有三部分组成 结构 HTML XHTML 表现 CSS 行为 DOM ECMA 2 ECMA 脚本 Javascript 的语法 1 区分大小写 2 弱类型变量 var age 10 var name dd 3 每行结尾的分号可有可无 但建议还是加上 4 注释与 java 相同 变量 变量是通过 var 关键字来声明的 Variable 变量的命名规则与 java 一致 注释有三种 这个只能注释单行 2 1 javascript 的 Hello world document write 是写在文档的最前面 2 2 slice substring subtr Slice 和 substring 2 5 指的是从第 3 为开始 取 5 2 3 个 数 其中 slice 的参数可以为负 Substr 2 5 指的是从第 3 为开始 取 5 个数 但 ECMAscript 没有对该方法进行标准化 因此尽量少使用该方 法 2 3 indexOf 和 lastIndexOf isNan typeOf indexOf i 从前往后 i 在第几位 indexOf i 3 可选参数 从第几个字符开始往后找 lastIndexOf i 从后往前 i 在第几位 lastIndexOf i 3 从后往前 i 在第几位 如果没找到 则返回 1 String 类型的变量 在 Java 中 用 符号表示字符串 用 表示单个字符 而在 javascript 中这两种都可以 Nan not a number Alert nan nan 返回 false 因此不推荐使用 nan 本身 推荐 函数 isNan Alert isNanN ab 返回 false typeof 运算符 var stmp test alert typeof stmp 输出 string alert type of 1 输出 number 此外 还有 boolean undefined object 如果是引用类型或者 null 值 null 值返回 object 这其实是 ecmascript 的一个错误 当声明的变量未初始化的时候 它的值就是 undefined 当没 有这个变量的时候 typeof 变 返回的值也是 undefined 但是没声明的变量是不能参与计 算的 当函数无明确返回值时 返回的也是 undefined Function a Alert a undefined 返回 true Alert null undefined 返回 true 2 4 数值计算 var mynum1 23 345 var mynum2 45 var mynum3 34 var mynum4 9e5 科学计数法 为 9 10 五次方 var fNumber 123 456 alert fNumber toExponential 1 保留的小数点数 1 2e 2 alert fNumber toExponential 2 1 23e 2 5 布尔值 var married true alert 1 typeof married Boolean married true alert 2 typeof married String 6 类型转换 转换成 string 类型有三种方式 var a 3 var b a var c a toString var d student a toString var a 11 document write a toString 2 转成 2 进制 document write a toString 3 转成 3 进制 如果不是数值 则转换报错 parseInt document write parseInt 1red6 返回 1 后面非 数值的将全部忽略 document write parseInt 53 5 返回 53 document write parseInt 0 xC 直接十进制 转换 12 document write parseInt isaacshun NAN document write parseInt 011 8 返回 9 document write parseInt 011 10 指定为十进 制 返回 11 parseFloat 与 parseInt 类似 2 7 数组 var aMap new Array China USA Britain aMap 20 Korea alert aMap length aMap 10 aMap 20 aMap 10 返回 undefined document write aMap join 用 来连接 var sFruit apple pear peach orange var aFruit sFruit split var aFruit apple pear peach orange alert aFruit reverse toString var aFruit pear apple peach orange aFruit sort var stack new Array stack push red stack push green stack push blue document write stack toString var vItem stack pop blue document write vItem document write stack toString red green 2 8 if 语句 首先获取用户的一个输入 并用 Number 强制转换为数字 var iNumber Number prompt 输入一个 5 到 100 之间的数 字 第二个参数 用于显示输入框的默认值 if isNaN iNumber 判断输入的是否是数字 NaN Not a Number document write 请确认你的输入正确 else if iNumber 100 iNumber 5 判断输入的 数字范围 document write 你输入的数字范围不在 5 和 100 之间 else document write 你输入的数字是 iNumber 2 9 switch iWeek parseInt prompt 输入 1 到 7 之间的整数 switch iWeek case 1 document write Monday break case 2 document write Tuesday break case 3 document write Wednesday break case 4 document write Thursday break case 5 document write Friday break case 6 document write Saturday break case 7 document write Sunday break default document write Error 2 10 while 语句 var i iSum 0 while i 100 iSum i i alert iSum do while for break continue 与 JAVA 语法一致 2 11 函数 function ArgsNum return arguments length document write ArgsNum isaac 25 document write ArgsNum document write ArgsNum 3 从这个例子可以看出 方法可以没有参数 也可以没有返回 值 但是照样可以传入参数和返回值 2 12 Date 对象 var myDate1 new Date 运行代码前的时间 for var i 0 i 1 var isKHTML sUserAgent indexOf KHTML 1 sUserAgent indexOf Konqueror 1 sUserAgent indexOf AppleWebKit 1 检测 IE Mozilla var isIE sUserAgent indexOf compatible 1 var isMoz sUserAgent indexOf Gecko 1 检测操作系统 var isWin navigator platform Win32 navigator platform Windows var isMac navigator platform Mac68K navigator platform MacPPC navigator platform Macintosh var isUnix navigator platform X11 if isOpera document write Opera if isKHTML document write KHTML if isIE document write IE if isMoz document write Mozilla if isWin document write Windows if isMac document write Mac if isUnix document write Unix 1 13 Global 对象 其实 isNan paraseInt 等都是 Global 对象的方法 EncodeURI 因为有效的 URI 不能包含某些字符 如空 格 这个方法就是用于将这个字符转换成 UTF 8 编码 使浏览器可以接受他们 Var suil file a html Alert encodeURI suil a html 即将空格编码成 20 Eval 方法 Eval alert hi 当解析程序发现 eval 时 它将把参数解析成真正的 ECMA script 语句 然后插入该语句所在位置 Global 除了有内置方法外 还有很多内置的属性 如 undefined nan Array String Number Date RegExp 等 1 14 Math 对象 Max 方法 min 方法 ceil floor round sqrt random Max 1 2 3 min 1 2 3 4 想取到 1 10 的数据 Math floor Math random 10 1 2 9 的数据 Math floor Math random 9 2 3 1 getElementsByTagName function searchDOM 放在函数内 页面加载完成后才用的 onload 加载 这时如果把 alert 这句改成用 document write 则会把 原内容覆盖掉 因为是后面才执行的 var oLi document getElementsByTagName li 输出长度 标签名称以及某项的文本节点值 alert oLi length oLi 0 tagName oLi 3 childNodes 0 nodeValue var oUl document getElementsByTagName ul var oLi2 oUl 1 getElementsByTagName li alert oLi2 length oLi2 0 tagName oLi2 1 childNodes 0 nodeValue 客户端语言 HTML JavaScript CSS 服务器端语言 ASP NET JSP PHP 3 2 getElementById var oLi document getElementById cssLi oLi style backgroundColor yellow 输出标签名称以及文本节点值 alert oLi tagName oLi childNodes 0 nodeValue 3 2 getElementsByName alert document getElementsByName a length 3 3 访问子节点 function myDOMInspector var oUl document getElementById myList 获取 标记 var DOMString if oUl hasChildNodes 判断是否有子节点 var oCh oUl childNodes for var i 0 i oCh length i 逐一查找 DOMString oCh i nodeName n alert DOMString 4 访问父节点 nodeName 如果为文本节点 则返回 text tagName 如果为文本节点 则返回 undefined function myDOMInspector var myItem document getElementById myDearFood alert myItem parentNode tagName function myDOMInspector var myItem document getElementById myDearFood var parentElm myItem parentNode while parentElm className colorful 一路往 上找 alert parentElm tagName 糖醋排骨 圆笼粉蒸肉 泡菜鱼 板栗烧鸡 麻婆豆腐 访问兄弟节点 function myDOMInspector var myItem document getElementById myDearFood 访问兄弟节点 var nextListItem myItem nextSibling var preListItem myItem previousSibling alert nextListItem tagName preListItem tagName 在 Firefox 中不支持 但是 IE 中却是支持的 3 6 第一个 最后一个 子节点 function nextSib node var tempLast node parentNode lastChild 判断是否是最后一个节点 如果是则返回 null if node tempLast return null var tempObj node nextSibling 逐一搜索后面的兄弟节点 直到发现元素节点为止 while tempObj nodeType 1 三目运算符 如果是元素节点则返回节点本身 否 则返回 null return tempObj nodeType 1 tempObj null function prevSib node var tempFirst node parentNode firstChild 判断是否是第一个节点 如果是则返回 null if node tempFirst return null var tempObj node previousSibling 逐一搜索前面的兄弟节点 直到发现元素节点为止 while tempObj nodeType 1 return tempObj nodeType 1 tempObj null function myDOMInspector var myItem document getElementById myDearFood 获取后一个元素兄弟节点 var nextListItem nextSib myItem 获取前一个元素兄弟节点 var preListItem prevSib myItem alert 后一项 nextListItem null nextListItem firstChild nodeValue null 前一项 preListItem null preListItem firstChild nodeValue null nodeType 元素 element 1 属性 attr 2 文本 text 3 注释 comments 8 文档 document 9 function showAttr var btnShowAttr document getElementById btnShowAttr 演示按钮 有很多属性 var attrs btnShowAttr attributes for var i 0 i attrs length i var attr attrs i alert nodeType attr nodeType attribute 的 nodeType 2 alert attr attr alert attr name attr name attr value function showDocument alert nodeType document nodeType 9 alert nodeName document nodeName alert document 3 7 getAttribute setAttribute function myDOMInspector 获取图片 var myImg document getElementsByTagName img 0 获取图片 title 属性 alert myImg getAttribute title function changePic 获取图片 var myImg document getElementsByTagName img 0 设置图片 src 和 title 属性 myImg setAttribute src 02 jpg myImg setAttribute title 紫荆公寓 3 8 创建新节点 function createP var op document createElement p var otext document createTextNode HHHHH op appendChild otext op setAttribute style text align center document body appendChild op 创建完节点 就马上会影响到下面的操作 比如 P 的数量就会多 1 个 3 9 删除节点 需要注意的是标签之间的父子关系 function deleteP var oP document getElementsByTagName p 0 oP parentNode removeChild oP 删除节点 3 10 替换节点 function replaceP var oOldP document getElementsByTagName p 0 var oNewP document createElement p 新建节点 var oText document createTextNode 这是一个感人肺 腑的故事 oNewP appendChild oText oOldP parentNode replaceChild oNewP oOldP 替换节点 3 11 插入节点 function insertP var oOldP document getElementsByTagName p 0 var oNewP document createElement p 新建节点 var oText document createTextNode 这是一个感人肺 腑的故事 oNewP appendChild oText oOldP parentNode insertBefore oNewP oOldP 插入节点 没有 insertAfter 但是可以自己写一个 function insertAfter newElement targetElement var oParent targetElement parentNode 首先找 到目标元素的父元素 if oParent lastChild targetElement 如果目标元 素已经是最后一个子元素了 oParent appendChild newElement 则直接 用 appendChild 加到子元素列表的最后 else 否则用 insertBefore 插入到目标元素的下一个兄弟元素之前 oParent insertBefore newElement targetElement nextSib ling function insertP var oOldP document getElementById myTarget var oNewP document createElement p 新建节点 var oText document createTextNode 这是一个感人肺 腑的故事 oNewP appendChild oText insertAfter oNewP oOldP 插入节点 其实这个也是通过 insertBefore 原理来实现的 3 12 cloneNode deepBoolean 复制并返回当前节点的复制节点 这个复制得到的节点是一 个孤立的节点 不在 document 树中 复制原来节点的属性 值 包括 ID 属性 所以在把这个新节点加到 document 之前 一定要修改 ID 属性 以便使它保持唯一 当然如果 ID 的 唯一性不重要可以不做处理 这个方法支持一个布尔参数 当 deepBoolean 设置 true 时 复制 当前节点的所有子节点 包括该节点内的文本 11111 p document getElementById mypara pclone p cloneNode true p parentNode appendChild pclone 3 12 文档碎片 function insertPs var aColors red green blue magenta yellow chocolate black aquamarine lime fuchsia brass azure brown bronze deeppink aliceblue gray copper coral feldspar orang e orchid pink plum quartz purple var oFragment document createDocumentFragment 创建文档碎片 for var i 0 i aColors length i var oP document createElement p var oText document createTextNode aColors i oP appendChild oText oFragment appendChild oP 将节点 先添加到碎片中 document body appendChild oFragment 最后一 次性添加到页面 3 13 innerHTML function myDOMInnerHTML var myDiv document getElementById myTest alert myDiv innerHTML 直接显示 innerHTML 的内容 修改 innerHTML 可直接添加代码 myDiv innerHTML innerHTML 可同时显示没有的代码 3 14 换皮肤 myUL1 color 0000FF font family Arial font weight bold myUL2 color FF0000 font family Georgia Times New Roman Times serif function check var oMy document getElementsByTagName ul 0 oMy className oMy className myUL1 myUL2 myUL1 修改 CSS 类 HTML JavaScript CSS 4 表格与表单 4 1 动态添加行 window onload function var oTr document getElementById member insertRow 2 插入一 行 var aText new Array aText 0 document createTextNode fresheggs aText 1 document createTextNode W610 aText 2 document createTextNode Nov 5th aText 3 document createTextNode Scorpio aText 4 document createTextNode 1038818 for var i 0 i aText length i var oTd oTr insertCell i oTd appendChild aText i 4 2 修改单元格内容 window onload function var oTable document getElementById member oTable rows 3 cells 4 innerHTML lost 修改单元格内容 4 3 动态删除 parentElement 是 IE dom parentNode 是标准 DOM window onload function var oTable document getElementById member oTable deleteRow 2 删除一行 后面的行号自动补齐 指从 table 中的第 2 行开始进 行删除 oTable rows 2 deleteCell 1 删除一个单 元格 后面的也自动补齐 function myDelete var oTable document getElementById member 删除该行 this parentNode parentNode parentNode remove Child this parentNode parentNode window onload function var oTable document getElementById member var oTd 动态添加 delete 链接 for var i 1 i oTable rows length i oTd oTable rows i insertCell 5 oTd innerHTML delete oTd firstChild onclick myDelete 添加删 除事件 4 4 动态删除列 function deleteColumn oTable iNum 自定义删除列函数 即每行删除相应单元格 for var i 0 i oTable rows length i oTable rows i deleteCell iNum window onload function var oTable document getElementById member deleteColumn oTable 2 4 5 控制 textarea 的字符个数 function LessThan oTextArea 返回文本框字符个数是否符号要求的 boolean 值 return oTextArea value length oTextArea getAttribute maxlength 5 BOM 模型 浏览器对象模型 可以对浏览器窗口进行访问和操作 使用 BOM 开发者可以移动窗口 改变状态栏中的文本等与页面 内容不相关的操作 Window 对象 这里可以用 window frames 0 或者用 windows frames topFrame 来引用框架 也可以用 topl 来代 替 window 属性 Top frames 0 window 对象可以忽略 提供的方法有 moveto moveBy resizeTo resizeBy 等方法 但 尽量避免使用它们 因为会对用户浏览产生影响 Open 方法 除了 open 方法 还有 alert comfirm prompt 方法 状态栏 Settimeout 与 setInterval Settimeout 下面的代码都是在 1 秒钟后显示一条警告 Settimeout alert aa 1000 Settimeout function alert aa 1000 如果要还未执行的暂停 可调用 clearTimeOut 方法 Var si Settimeout function alert aa 1000 clearTimeout si setInterval History 向后一页 window history go 1 等于 history back 向前一页 window history go 1 等于 history forword Document LastModified title URL 属性都是比较常用 Location 对象 Navigator 对象 Screen 对象 6 事件 6 1 冒泡型事件 function add sText var oDiv document getElementById display oDiv innerHTML sText 输出点击顺序 body onclick add body div onclick add div p onclick add p Click Me 先执行最里面的 p 再往外执行 6 2 监听函数 window onload function var oP document getElementById myP 找到对 象 oP onclick function 设置事件监听函数 alert 我被点击了 Click Me Function a oP onclick a 这样会先把 a 函数加载到缓存 不是最佳方案 Var A Function oP onclick a 这样只有在 onclick 事件发生的时候 加载该函数 若以上的监听函数 在 onclick 的时候 需要执行多个函数 那就只能用以下的方法 IE 标准 function fnClick alert 我被点击了 oP detachEvent onclick fnClick 点击了一次 后删除监听函数 var oP 声明在函数外 这样就可以两个函数一起使用 window onload function oP document getElementById myP 找到对象 oP attachEvent onclick fnClick 添加监听函 数 Click Me 也可以添加多个监听器 oP attachEvent onclick fnClick1 添加监 听函数 1 oP attachEvent onclick fnClick2 添加监 听函数 2 执行顺序为 fnClick2 fnClick1 但是以上的监听器均为 IE 中的标准 而符合标准 DOM firefox 的监听器如下 oP addEventListener click fnClick1 false 添加监听函数 1 oP addEventListener click fnClick2 false 添加监听函数 2 因此这种方式在 Firefox 中支持 而在 IE 中不支持 为了兼容性 可这样写 if el addEventListener el addEventListener click KindDisableMenu false else if el attachEvent el attachEvent onclick KindDisableMenu 第三个参数为 useCapture 而 useCapture 這個參數就是在控制這時候兩個 click 事件 的先後順序 如果是 false 那就會使用 bubbling 他是從 內而外的流程 所以會先執行藍色元素的 click 事件再執行 紅色元素的 click 事件 如果是 true 那就是 capture 和 bub
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!