读书笔记 - js高级程序设计 - 第十章 DOM
文档元素
|
是文档的最外层元素,在Html页面中,文档元素始终都是<html>元素
在xml中,任何元素都可以是文档元素
|
Node类型
|
Node.ELEMENT_NODE 元素
Node.ATTRIBUTE_NODE 属性
Node.TEXT_NODE 文本元素
Node.CDATA_SECTION_NODE
Node.ENTITY_REFERENCE_NODE
Node.ENTITY_NODE
Node.PROCESSING_INSTRUCTION_NODE;
Node.COMMENT_NODE
Node.DOCUMENT_NODE:
Node.DOCUMENT_TYPE_NODE
Node.DOCUMENT_FRAGMENT_NODE;
Node.NOTATION_NODE
|
判断Node类型时
|
最好用数字,因为有些浏览器没有公开上面的常量名
|
nodeType
nodeName
nodeValue
|
1
div html body
|
子节点
|
someNode.childNodes[0]; //取到第一个元素
someNode.childNodes.item(1);//取到第二个元素
someNode.firstChild
someNdoe.lastChild
|
把子节点转换成数组
|
Array.prototype.slice.call( someNode.childNodes, 0 ) ;
|
父节点
|
parentNode属性
|
兄弟节点
|
previousSibling
nextSibling
|
判断 是否有子节点
|
hasChildNodes()
|
ownerDocument
|
所有节点都有这个属性 指向整个文档的文档节点
|
操作节点
|
1 放到最后一个子节点 appendChild() ; 和 addChild 差不多,只能有一个
2 放到指定位置 insertBefore(a,b) 要插入的节点 作为参照的节点
3 replaceChild( a, b ) 要插入的节点 和 要替换的节点
4 removeChild( a ) 只是移除节点
5 cloneNode() ; 传true表示深复杂,但它不会复制添加dom节点中的js属性,例如事件处理程序.
6 nomalize() 如果找到了空文本节点,则删除;如果找到相邻的文本节点,则将它们合并为一个文本节点
|
Document类型
|
document对象就是HTMLDocument
document.documentElement
document.firstChild
document.childNode[0]
上面三个值都指向 <html>
|
document.boby
|
指向<body>
|
document.docType
|
取得对<!DOCTYPE>的引用 ,各个浏览器对它的支持不一致,因此它的作用很有限
|
document.title
|
取得标头
|
document.URL
|
取得完整 url
|
document.domain
|
取得域名
域名只能从 紧绷的 设置成 松散的, 反之则不行
|
document.referrer
|
取得来源页面的URL
|
通讯
|
来自不同域的页面无法通过js通信
如果把两个页面的document.domain都设置为 17zuoe.com ,它们之间就可以通信了
|
查找元素
|
getElementById() //注意是通过id 不是通过name
getElementByTagName() //返回的是包含标签名的NodeList,在HTML文档中,会返回一个HTMLCollection对象. 可以用[]来访问元素 也可以用 item(0)来访问,也可以用 namedItem 来访问
getElementByTagName( * ) // 返回所有元素
getElementByName() // 返回的是HTMLCollection对象
|
其它集合
|
document.anchors 包含文档中所有带 name 特性的<a>元素
document.images 包含文档中所有<img>元素
document.links 包含所有文档中带href特性的 <a>元素
|
文档写入
|
document.write() 写入输出流中的文本
document.writeIn() 写入输出流中的文本 末尾添加一个换行符 \n
document.open() 打开网页的输出流 打开一个要写入的文档 并把这文档清空
document.close() 关闭网页的输出流 关闭已经打开的文档 相当于关闭它的编辑功能
|
Element类型
|
nodeType是1
nodeName的值是元素标签名 / 也可以用TagName
nodeValue值为 null
parentNode是Document或Element
其子节点可能是 Element Text Comment ProcessingInstruction CDATASection 或 EntityReference
|
取得HTML Element的信息
|
都可以用 js 代码取得
var div = document.getElementById("myDiv");
div.id
div.className
div.title
div.lang
div.dir
有些修改会立即生效 className 和 dir, 其它的不会立即生效
不要以访问自定义的特性
|
操作HTML元素特性的方法
|
getAttribute()
var div = document.getElementById("myId");
div.getAttribute("class") //注意这里传的和实际特性名相同 也可以取得自定义的特性
setAttribute(a,b)
removeAttribute () 不仅会删除特性的值 也会删除特性
|
HTML元素的属性attributes
|
element.attributes 它是一个NamedNodeMap 和 NodeList类似
它有如下方法
1 getNamedItem(name)
2 removeNamedItem(name)
3 setNamedItem(node);
4 item(pos) //也可用[]来访问
比如 var id = element.attributes.getNamedItem("id").nodeValue
开发人员很少用attributes 而常用 getAttribute setAttribute removeAttribute
|
创建元素
|
var div = document.createElement("div")
|
创建文本节点
|
document.createTextNode();
|
分割文本节点
|
document.spliteText(序号)
|
Attr类型
|
有3个属性
name value specified
|
创建动态脚本的方法
|
插入外部文件
直接插入js代码
var script = document.createElement("script")
script.type = "text/javascript";
script.src = "client.js";
document.body.appendChild( script ) ;
但并不知道 什么时候可以加载完脚本
|
样式
|
link元素用户包含来自外部的文件 必须将link元素添加到 head 里面
style元素用于指定嵌入的样式
|
NodeList
|
理解NodeList NamedNodeMap HTMLCollection 是从整体上透彻理解DOM的关键所在,这三个集合都是动态的,每当文档结构发生变化时,它们都会得到更新。
因此,它们始终都会保存着最新的,最准确的信息。
应尽量减少对NodeList的访问,因为每次访问NodeList, 都会运行一次基于文档的查询.
所以 可以考虑将从NodeList中取得的值缓存起来
DOM操作往往是javascript程序中开销最大的部分,因为每次访问NodeList,都会运行一次查询,有鉴于此,最好的办法就是尽量减少DOM操作
|
读书笔记 - js高级程序设计 - 第十章 DOM的更多相关文章
- 读书笔记 - js高级程序设计 - 第十五章 使用Canvas绘图
读书笔记 - js高级程序设计 - 第十三章 事件 canvas 具备绘图能力的2D上下文 及文本API 很多浏览器对WebGL的3D上下文支持还不够好 有时候即使浏览器支持,操作系统如果缺缺 ...
- 读书笔记 - js高级程序设计 - 第十一章 DOM扩展
对DOM的两个主要的扩展 Selectors API HTML5 Element Traversal 元素遍历规范 querySelector var body = document.query ...
- 读书笔记 - js高级程序设计 - 第十二章 DOM2和DOM3
Node类型的变化 访问元素的样式 myDiv.style.backgroundColor = "red" myDiv.style.width = "100px& ...
- 读书笔记 - js高级程序设计 - 第八章 BOM
BOM的核心对象是window 它表示浏览器的一个实例,在浏览器中,window对象有双重角色,它既是通过js访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象,这意味着在网 ...
- 读书笔记 - js高级程序设计 - 第五章 引用类型
引用类型 和 类 不是一个概念 用typeof来检测属性是否存在 typeof args.name == "string" 需要实验 访问属性的方法 .号和[] 一般情况下要 ...
- 读书笔记 - js高级程序设计 - 第七章 函数表达式
闭包 有权访问另一个函数作用域中的变量的函数 匿名函数 函数没有名字 少用闭包 由于闭包会携带包含它的函数的作用域,因此会比其它函数占用更多的内存.过度使用闭包可能会导致内存占用过多,我们建议读者 ...
- 读书笔记 - js高级程序设计 - 第六章 面向对象的程序设计
EcmaScript有两种属性 数据属性 和 访问器属性 数据属性有4个特性 Configurable Enumerable Writable Value 前三个值的默认值都为false ...
- 读书笔记 - js高级程序设计 - 第四章 变量 作用域 和 内存问题
5种基本数据类型 可以直接对值操作 判断引用类型 var result = instanceof Array 执行环境 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这 ...
- 读书笔记 - js高级程序设计 - 第三章 基本概念
启用严格模式 "use strict" 这是一个 pragma 编译指示 让编码意图更清晰 是一个重要原则 5种简单数据类型 Undefined Null Boolean Num ...
随机推荐
- Cent OS下配置虚拟Ip地址
1.首先我们登录操作系统 用户名root 密码 123456 然后我们输入ip查询命名 ip addr 也可以输入 ifconfig查看ip,但此命令会出现3个条目,centos的ip地址是ens3 ...
- 机器学习(ML)十一之CNN各种模型
深度卷积神经网络(AlexNet) 在LeNet提出后的将近20年里,神经网络一度被其他机器学习方法超越,如支持向量机.虽然LeNet可以在早期的小数据集上取得好的成绩,但是在更大的真实数据集上的表现 ...
- php+ajax实现无刷新动态加载数据技术
我们浏览有些网页的时候,当拉动浏览器的滚动条时到页底时,页面会继续自动加载更多内容供用户浏览.这种技术我暂且称它为滚屏加载技术.我们发现很多网站用到这种技术,必应图片搜索.新浪微博.QQ空间等将该技术 ...
- FPGA流程设计
做fpga也有四年时间了,该有个总结.刚开始那会,学习东西都是死记硬背,去面试也是直接带着答案去了. 时间久了,才懂得设计一些基本思路. 1. 设计输入: verilog代码和原理图.画原理图都是懒得 ...
- ROS-2 : ROS系统层级结构
一.ROS文件系统层级 ROS的文件和文件夹按如下层级来组织:
- 【C#】关于左移/右移运算符的使用
吐槽先~为什么我的老师大学时候没教过我这东西 - -. 继续送栗子: 比如 “(1+2)<<3” 你们猜等于几~ Debug.Log((1+2)<<3)之后输出的是“24”. ...
- shell命令、调度工具、后台执行线程和软连接
一.shell命令 1.后缀.sh 第一行需要加#!/bin/bash 没有的话,需呀sh 命令执行 示例test.sh: #!/bin/bash date ./test.sh 提示没有权限,此时,需 ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:内嵌下拉菜单的按钮组
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 设备树DTS 学习:3-常用的DTS 函数
Linux内核中目前DTS相关的函数都是以of_前缀开头的,它们的实现位于内核源码的drivers/of下面 void __iomem*of_iomap(struct device_node *nod ...
- MapReduce会自动忽略文件夹下的.开头的文件
MapReduce会自动忽略文件夹下的.开头的文件,跳过这些文件的处理.