Js高级程序设计第三版学习(十二章)

第十二章 DOM2和DOM3

  1.样式:

  • 访问样式属性

任何支持style特性的HTML元素都有一个style属性,我们可以通过style属性,来随时设置样式,外观会自动更新

      var hehe = document.getElementsByClassName('ppap apple')[0];hehe.style.width = '100%';hehe.style.height = '200px';

DOM2级为style对象定义了一些属性和方法

      var hehe = document.getElementsByClassName('ppap apple')[0];//style属性 返回CSSStyleDeclaration对象console.log(hehe.style);//cssText 返回行内文本内容 也可以直接修改 跟直接修改style相同console.log(hehe.style.cssText)//background: rgb(255, 204, 0); width: 100%; height: 200px;//getPropertyPriority 判断样式是否使用了 !important 使用返回important 位置用返回''console.log(hehe.style.getPropertyPriority('width')); //important//获取指定样式的值console.log(hehe.style.getPropertyValue('width'));//100%//从样式中删除属性console.log(hehe.style.removeProperty('width'));//设置属性hehe.style.setProperty('width','100%');//获取给定style属性的个数console.log(hehe.style.length);

style属性获取的是行内样式, 而正常项目中都是使用的是css样式表, 如果我们要获取非行内样式可以使用window.getComputedStyle(元素,伪类)(ie9已支持), 而currentStyle仅仅ie6支持, 新版本已经ie已经不支持了,而且计算样式是只读的,如果更改会报错

 var hehe = document.getElementsByClassName('ppap apple')[0];var computedS = window.getComputedStyle(hehe);console.log(computedS.height);//50px// computedS.height = '100px'; 报错console.log(hehe.currentStyle);//undefined
  • 操作样式表

CSSStyleSheet类型表示样式表,包括内联样式表(<style>)和外链样式表(link),CSSStyleSheet对象除了disabled属性外其他都是只读的

      // document.styleSheets[2].deleteRule()var outerSheet = document.styleSheets[0];var innerSheet = document.styleSheets[2];//disable禁用 如果设置为true 则该样式表被备用// innerSheet.disabled = true;//引用样式表的URL 如果是内联则返回nullconsole.log(outerSheet.href)//file:///D:/books/study/one/style.cssconsole.log(innerSheet.href)//null

CSSStyleSheet对象提供了一些方法用来操作内联或外链样式表, 但需要注意的是 chrome无法操作外链样式表的cssRules(会报错),但是内联没有问题,ff跟ie11(ie9及以上)都可以,在cssRules[0]中 cssText是只读的,但我们可以通过style.cssText修改

  // document.styleSheets[2].deleteRule()var outerSheet = document.styleSheets[0];var innerSheet = document.styleSheets[2];//disable禁用 如果设置为true 则该样式表被备用// innerSheet.disabled = true;//引用样式表的URL 如果是内联则返回nullconsole.log(outerSheet.href)//file:///D:/books/study/one/style.cssconsole.log(innerSheet.href)//null//console.log(outerSheet.cssRules)//无法访问报错console.log(innerSheet.cssRules);//CSSRuleList {0: CSSStyleRule, 1: CSSStyleRule, 2: CSSKeyframesRule, 3: CSSStyleRule, length: 4}//修改规则  获取第一条规则并通过style属性修改 也可以直接修改style.cssTextinnerSheet.cssRules[0].style.background ='#ff0000';innerSheet.cssRules[0].style.cssText = 'body {background:#000000}'//创建规则  第一个参数 规则 第二个参数插入的索引innerSheet.insertRule('body{font-size:30px}',0)//删除规则innerSheet.deleteRule(innerSheet.cssRules[0])
  • 元素大小

偏移量(offset): 元素在屏幕上占有的所有可见空间,包括内间距,滚动条和边框(实际大小包括超出视口部分),offsetParent代表距离子元素最近的父元素,注意offsetParent跟parentNode不一定相同,offsetParent的确实是根据是否存在定位position有关的,如果没有position那么子元素的offsetParent就是body,offsetTop与offsetLeft都与offsetParent有关

      var hehe = document.getElementsByClassName('ppap apple')[0];//offsetWidth 元素实际的宽 offsetHeight 元素实际的高console.log(hehe.offsetWidth)//offsetTop 元素距离包含元素上边的距离, offsetLeft元素距离包含元素左边的距离console.log(hehe.offsetTop) //0console.log(hehe.offsetLeft) //40

客户区大小指的是 元素内容加上内间距所占的大小

      var hehe = document.getElementsByClassName('ppap apple')[0];//clientHeight 元素内容加内间距console.log(hehe.clientHeight)//50//clientTop 元素边框的厚度console.log(hehe.clientTop)//10console.log(hehe.clientLeft)//10

滚动大小: 包含滚动内容的元素大小

      var hehe = document.getElementsByClassName('ppap apple')[0];//scrollHeight 元素内容去除滚动条后的实际大小console.log(hehe.scrollHeight); //50//scrollTop 滚动条距离上方的高度 更改属性,可改变元素的位置setInterval(function() {hehe.scrollTop += 20;console.log(hehe.scrollTop)}, 100);

  2.遍历:

DOM遍历时深度优先的遍历, 以给定节点为根,不能向上超出DOM树的根节点,任何节点都可以作为遍历的根节点

NodeIterator: createNodeIterator(root,whatToShow,filter)创建遍历,root:指定节点,whatToShow:接受一个数字码,常用NodeFilter类型定义, 如NodeFilter.SHOW_ELEMENT,  按位或 (|) NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT,filter:指定一个自定义NodeFilter对象,NodeFilter对象只有一个方法(acceptNode),方法返回NodeFilter.FILTER_ACCEPT或者NodeFilter.FILTER_SKIP, NodeFilter.FILTER_ACCEPT继续执行, NodeFilter.FILTER_SKIP跳过当前节点,filter 可以绑定一个对象 给acceptNode 绑定方法,或者直接传入匿名方法

      //createNodeIterator 迭代 第一个参数起点节点, 第二个参数 要访问的节点代码, 第三个参数过滤方法var iterator = document.createNodeIterator(document.body,NodeFilter.SHOW_ELEMENT,{acceptNode: function(node) {return node.className.indexOf('ppap') !== -1? NodeFilter.FILTER_ACCEPT: NodeFilter.FILTER_SKIP;}}// function(node) {//   return node.className.indexOf('ppap') !== -1//     ? NodeFilter.FILTER_ACCEPT//     : NodeFilter.FILTER_SKIP;// });var ppapList = [];var node = null;do {//第一次执行nextNode 返回第一个匹配的节点 如果没有了匹配的节点返回nullnode = iterator.nextNode();if (node === null) {break;}ppapList.push(node);} while (true);console.log(ppapList); //[li#hehe.ppap.apple, li.ppap, li.ppap, li.ppap]

TreeWalker是NodeIterator,TreeWalker需要createTreeWalker创建,参数相同,但第三个参数filter有所不同, TreeWalker可以不需要过滤器,也拥有

      var treeWalker = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT, null);var nodeT = [];nodeT.push(treeWalker.nextNode())console.log(nodeT) //[div]

filter 过滤条件有三个FILTER_ACCEPT(通过),FILTER_SKIP(continue),FILTER_REJECT(break),同时TreeWalker可以随时改变起点 currentNode 会获取上一次循环返回的节点, 更改currentNode会更改节点

Js高级程序设计第三版学习(十二章)相关推荐

  1. C语言谭浩强第三版第十二章例题及课后题:位运算

    eg12.1取一个整数a从右端开始的4~7位 0000...000000        0 1111...111111       ~0  1111...110000       ~0<< ...

  2. JavaScript高级程序设计第四版学习--第二十四章

    title: JavaScript高级程序设计第四版学习–第二十四章 date: 2021-5-31 10:46:01 author: Xilong88 tags: JavaScript 本章内容: ...

  3. JavaScript高级程序设计第三版.CHM【带实例】

    从驱动全球商业.贸易及管理领域不计其数的复杂应用程序的角度来看,说 JavaScript 已经成为当今世界上最流行的编程语言一点儿都不为过. JavaScript 是一种非常松散的面向对象语言,也是 ...

  4. 《汇编语言》王爽(第四版) 第十二章 实验12

    文章目录 前言 一.思路分析 1.安装 2.设置中断向量 3.do0程序 4.测试 5.优化 二.最终成果 1.完整代码 2.效果图 总结 前言 本文是王爽老师<汇编语言>(第四版) 第十 ...

  5. javascript高级程序设计 第三版

    网盘地址 提取码:vh81 笔记 第二章 2.1script标签 <script>元素属性:async.charset.defer.language.src.type async和defe ...

  6. 开发日记-20190915 关键词 汇编语言王爽版 第十二章

    第十二章 内中断 任何一个通用的CPU,比如8086,都具备一种能力,可以在执行完当前正在执行的指令之后,检测到从CPU外部传送过来或内部产生的一种特殊信息,并且可以立即对所接收的信息进行处理.这种特 ...

  7. 13.4.3 鼠标与滚轮事件【JavaScript高级程序设计第三版】

    鼠标事件是Web 开发中最常用的一类事件,毕竟鼠标还是最主要的定位设备.DOM3 级事件中定义了9 个鼠标事件,简介如下. click:在用户单击主鼠标按钮(一般是左边的按钮)或者按下回车键时触发.这 ...

  8. 10.1.2 Document类型【JavaScript高级程序设计第三版】

    JavaScript 通过Document 类型表示文档.在浏览器中,document 对象是HTMLDocument(继承自Document 类型)的一个实例,表示整个HTML 页面.而且,docu ...

  9. JavaScript高级程序设计第三版 第3章 基本概念

    第3章 基本概念 3.1 语法 3.1.1 区分大小写 3.1.2 标识符 3.1.3 注释 3.1.4 严格模式 3.1.5 语句 3.2 关键字和保留字 3.3 变量 3.4 数据类型 3.4.1 ...

最新文章

  1. 公钥和私钥怎么生成_有趣图文帮你通俗易懂地理解公钥和私钥的区别以及与CA证书等概念...
  2. 蓝桥杯C++ AB组辅导课 第一讲 递归与递推 Acwing
  3. 解决在ascx使用outputcache就不可以设置用户控件自己的属性
  4. 电脑小白来一起学习计算机基础知识!
  5. 【渝粤教育】电大中专消费者行为学30分钟交卷作业 题库
  6. [转]ODAC 应用技巧 (一)使用 ODAC 的 Net 方式
  7. 华为鸿蒙系统是物联网,华为鸿蒙系统官宣!谷歌工程师直接懵了,硅谷感慨:中国人太厉害...
  8. 拿高薪的web前端都是怎么学的?
  9. iOS开发UI调试神器----Reveal
  10. Clojure的并发(七)pmap、pvalues和pcalls
  11. 堆排序实现(C++)
  12. 在mac上制作PDF的基础教程
  13. 搭建一个属于自己的服务器,并实现内网穿透(外网访问本地服务器功能)
  14. 信息系统自动决策机制的使用
  15. 华为mate50pro和华为mate50RS的区别
  16. 碎碎点点-积土成山,风雨兴焉;积水成渊,蛟龙生焉
  17. 实时云渲染和本地渲染的区别
  18. (转载)Bro:一个开放源码的高级NIDS系统
  19. 敏之澳分享拼多多的宝贝标题要怎么写?
  20. 使用Mock进行单元测试

热门文章

  1. 学计算机很痛苦要不要坚持,大学里这2个专业“最累”,过程很痛苦,但毕业后很吃香...
  2. 深入理解Java对象的创建过程:类的初始化与实例化
  3. C++中的_access函数
  4. vue区分单双击事件
  5. 网页随处点击出现小火花简约特效 html+css+js
  6. [论文解析] NeRF-Art: Text-Driven Neural Radiance Fields Stylization
  7. mysql ssd_MySQL数据库场景中NVMe SSD的优化
  8. 十分钟轻松学会python-10分钟轻松学会python turtle绘图
  9. Redis常用配置详解
  10. linux哪个版本好