Js高级程序设计第三版学习(十二章)
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高级程序设计第三版学习(十二章)相关推荐
- C语言谭浩强第三版第十二章例题及课后题:位运算
eg12.1取一个整数a从右端开始的4~7位 0000...000000 0 1111...111111 ~0 1111...110000 ~0<< ...
- JavaScript高级程序设计第四版学习--第二十四章
title: JavaScript高级程序设计第四版学习–第二十四章 date: 2021-5-31 10:46:01 author: Xilong88 tags: JavaScript 本章内容: ...
- JavaScript高级程序设计第三版.CHM【带实例】
从驱动全球商业.贸易及管理领域不计其数的复杂应用程序的角度来看,说 JavaScript 已经成为当今世界上最流行的编程语言一点儿都不为过. JavaScript 是一种非常松散的面向对象语言,也是 ...
- 《汇编语言》王爽(第四版) 第十二章 实验12
文章目录 前言 一.思路分析 1.安装 2.设置中断向量 3.do0程序 4.测试 5.优化 二.最终成果 1.完整代码 2.效果图 总结 前言 本文是王爽老师<汇编语言>(第四版) 第十 ...
- javascript高级程序设计 第三版
网盘地址 提取码:vh81 笔记 第二章 2.1script标签 <script>元素属性:async.charset.defer.language.src.type async和defe ...
- 开发日记-20190915 关键词 汇编语言王爽版 第十二章
第十二章 内中断 任何一个通用的CPU,比如8086,都具备一种能力,可以在执行完当前正在执行的指令之后,检测到从CPU外部传送过来或内部产生的一种特殊信息,并且可以立即对所接收的信息进行处理.这种特 ...
- 13.4.3 鼠标与滚轮事件【JavaScript高级程序设计第三版】
鼠标事件是Web 开发中最常用的一类事件,毕竟鼠标还是最主要的定位设备.DOM3 级事件中定义了9 个鼠标事件,简介如下. click:在用户单击主鼠标按钮(一般是左边的按钮)或者按下回车键时触发.这 ...
- 10.1.2 Document类型【JavaScript高级程序设计第三版】
JavaScript 通过Document 类型表示文档.在浏览器中,document 对象是HTMLDocument(继承自Document 类型)的一个实例,表示整个HTML 页面.而且,docu ...
- 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 ...
最新文章
- 公钥和私钥怎么生成_有趣图文帮你通俗易懂地理解公钥和私钥的区别以及与CA证书等概念...
- 蓝桥杯C++ AB组辅导课 第一讲 递归与递推 Acwing
- 解决在ascx使用outputcache就不可以设置用户控件自己的属性
- 电脑小白来一起学习计算机基础知识!
- 【渝粤教育】电大中专消费者行为学30分钟交卷作业 题库
- [转]ODAC 应用技巧 (一)使用 ODAC 的 Net 方式
- 华为鸿蒙系统是物联网,华为鸿蒙系统官宣!谷歌工程师直接懵了,硅谷感慨:中国人太厉害...
- 拿高薪的web前端都是怎么学的?
- iOS开发UI调试神器----Reveal
- Clojure的并发(七)pmap、pvalues和pcalls
- 堆排序实现(C++)
- 在mac上制作PDF的基础教程
- 搭建一个属于自己的服务器,并实现内网穿透(外网访问本地服务器功能)
- 信息系统自动决策机制的使用
- 华为mate50pro和华为mate50RS的区别
- 碎碎点点-积土成山,风雨兴焉;积水成渊,蛟龙生焉
- 实时云渲染和本地渲染的区别
- (转载)Bro:一个开放源码的高级NIDS系统
- 敏之澳分享拼多多的宝贝标题要怎么写?
- 使用Mock进行单元测试
热门文章
- 学计算机很痛苦要不要坚持,大学里这2个专业“最累”,过程很痛苦,但毕业后很吃香...
- 深入理解Java对象的创建过程:类的初始化与实例化
- C++中的_access函数
- vue区分单双击事件
- 网页随处点击出现小火花简约特效 html+css+js
- [论文解析] NeRF-Art: Text-Driven Neural Radiance Fields Stylization
- mysql ssd_MySQL数据库场景中NVMe SSD的优化
- 十分钟轻松学会python-10分钟轻松学会python turtle绘图
- Redis常用配置详解
- linux哪个版本好