文档元素
是文档的最外层元素,在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的更多相关文章

  1. 读书笔记 - js高级程序设计 - 第十五章 使用Canvas绘图

    读书笔记 - js高级程序设计 - 第十三章 事件   canvas 具备绘图能力的2D上下文 及文本API 很多浏览器对WebGL的3D上下文支持还不够好   有时候即使浏览器支持,操作系统如果缺缺 ...

  2. 读书笔记 - js高级程序设计 - 第十一章 DOM扩展

      对DOM的两个主要的扩展 Selectors API HTML5  Element Traversal 元素遍历规范 querySelector var body = document.query ...

  3. 读书笔记 - js高级程序设计 - 第十二章 DOM2和DOM3

      Node类型的变化   访问元素的样式 myDiv.style.backgroundColor = "red" myDiv.style.width = "100px& ...

  4. 读书笔记 - js高级程序设计 - 第八章 BOM

      BOM的核心对象是window 它表示浏览器的一个实例,在浏览器中,window对象有双重角色,它既是通过js访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象,这意味着在网 ...

  5. 读书笔记 - js高级程序设计 - 第五章 引用类型

      引用类型 和 类 不是一个概念 用typeof来检测属性是否存在 typeof args.name == "string"  需要实验 访问属性的方法 .号和[] 一般情况下要 ...

  6. 读书笔记 - js高级程序设计 - 第七章 函数表达式

      闭包 有权访问另一个函数作用域中的变量的函数 匿名函数 函数没有名字 少用闭包 由于闭包会携带包含它的函数的作用域,因此会比其它函数占用更多的内存.过度使用闭包可能会导致内存占用过多,我们建议读者 ...

  7. 读书笔记 - js高级程序设计 - 第六章 面向对象的程序设计

      EcmaScript有两种属性 数据属性 和 访问器属性 数据属性有4个特性 Configurable Enumerable Writable Value   前三个值的默认值都为false   ...

  8. 读书笔记 - js高级程序设计 - 第四章 变量 作用域 和 内存问题

      5种基本数据类型 可以直接对值操作 判断引用类型 var result = instanceof Array 执行环境 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这 ...

  9. 读书笔记 - js高级程序设计 - 第三章 基本概念

    启用严格模式 "use strict" 这是一个 pragma 编译指示 让编码意图更清晰  是一个重要原则 5种简单数据类型 Undefined Null Boolean Num ...

随机推荐

  1. Cent OS下配置虚拟Ip地址

    1.首先我们登录操作系统 用户名root 密码 123456 然后我们输入ip查询命名 ip addr  也可以输入 ifconfig查看ip,但此命令会出现3个条目,centos的ip地址是ens3 ...

  2. 机器学习(ML)十一之CNN各种模型

    深度卷积神经网络(AlexNet) 在LeNet提出后的将近20年里,神经网络一度被其他机器学习方法超越,如支持向量机.虽然LeNet可以在早期的小数据集上取得好的成绩,但是在更大的真实数据集上的表现 ...

  3. php+ajax实现无刷新动态加载数据技术

    我们浏览有些网页的时候,当拉动浏览器的滚动条时到页底时,页面会继续自动加载更多内容供用户浏览.这种技术我暂且称它为滚屏加载技术.我们发现很多网站用到这种技术,必应图片搜索.新浪微博.QQ空间等将该技术 ...

  4. FPGA流程设计

    做fpga也有四年时间了,该有个总结.刚开始那会,学习东西都是死记硬背,去面试也是直接带着答案去了. 时间久了,才懂得设计一些基本思路. 1. 设计输入: verilog代码和原理图.画原理图都是懒得 ...

  5. ROS-2 : ROS系统层级结构

    一.ROS文件系统层级 ROS的文件和文件夹按如下层级来组织:

  6. 【C#】关于左移/右移运算符的使用

    吐槽先~为什么我的老师大学时候没教过我这东西  - -. 继续送栗子: 比如 “(1+2)<<3” 你们猜等于几~ Debug.Log((1+2)<<3)之后输出的是“24”. ...

  7. shell命令、调度工具、后台执行线程和软连接

    一.shell命令 1.后缀.sh 第一行需要加#!/bin/bash 没有的话,需呀sh 命令执行 示例test.sh: #!/bin/bash date ./test.sh 提示没有权限,此时,需 ...

  8. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:内嵌下拉菜单的按钮组

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. 设备树DTS 学习:3-常用的DTS 函数

    Linux内核中目前DTS相关的函数都是以of_前缀开头的,它们的实现位于内核源码的drivers/of下面 void __iomem*of_iomap(struct device_node *nod ...

  10. MapReduce会自动忽略文件夹下的.开头的文件

    MapReduce会自动忽略文件夹下的.开头的文件,跳过这些文件的处理.