Javascript基础系列(八)-DOM

DOM

文档对象模型,针对HTML和XML文档的一个API,描述了一个层次化的节点树
可对节点进行增删改查操作

节点都继承自Node类型

节点层次

Node

nodetype描述节点类型

<div id="title"></div>

console.info( $('#title')[0].nodeType ) // 1

节点关系

Node--nodeType 节点类型
--childNodes 子节点集合
--firstChild 第一个子节点
--lastChild 最后一个子节点
--nextSibling 下一个节点
--previousSibling 上一个节点
--parentNode 父节点
--ownerDocument 文档根节点

节点操作

Node--appendChild 追加子节点
--insertBefore(newnode, oldnode) 基于oldnode之前插入一个newnode
--removeChild(badnode) 移除节点
--replaceChild(newnode, oldnode) newnode替换oldnode
--cloneNode(boolean) 是否进行深克隆节点

Document

特征

nodeType 的值为 9
nodeName 的值为"#document"
nodeValue 的值为 null
parentNode 的值为 null
ownerDocument 的值为 null

属性

html
--document.documentElement
--document.firstChild
--document.childNodes[0]

body document.body

doctype document.doctype
title document.title
url document.URL
domain document.domain

元素查找

document.getElementById
document.getElementsByTagName 返回HTMLCollection
document.getElementsByName 返回HTMLCollection

特殊集合

document.anchors 所有带name属性的a标签
document.applets 文档中所有的applet元素
document.forms 文档中所有的form表单集合
docuemnt.images 文档所有的img元素
document.links 文档中所有带href的a标签

文档写入

document.write() document.wirteln()

Elmenet

元素节点

属性值
id, className, title, dir [ ltr, rtl]

设置与获取属性
getAttribute
getAttributeNode
setAttribute
setAttributeNode
removeAttribute

创建元素
createElement

Text

文本节点

创建文本节点
createTextNode
normalize() 当节点下添加了多个其他的节点的时候,方法移除空的文本节点,并连接相邻的文本节点。

splitText(index) 从指定位置开始分隔,新文本节点包含剩下的文本

Comment

注释

创建注释节点
createComment

Attr

nodeType 的值为 2
nodeName 的值是特性的名称
nodeValue 的值是特性的值
parentNode 的值为 null
在 HTML 中不支持(没有)子节点

创建属性节点
createAttribute

DOM操作

动态脚本

<script type="text/javascript" src="client.js"></script>

<script type="text/javascript"> 
	 function sayHi(){ 
	 alert("hi"); 
	 } 
</script>

var script = document.createElement("script"); 
script.type = "text/javascript";
script.src = "client.js"; 
document.body.appendChild(script);

动态样式

<link rel="stylesheet" type="text/css" href="styles.css">

<style type="text/css"> 
	body { 
	 background-color: red; 
	} 
</style>

var link = document.createElement("link"); 
link.rel = "stylesheet"; 
link.type = "text/css"; 
link.href = "style.css"; 
var head = document.getElementsByTagName("head")[0]; 
head.appendChild(link);

操作表格

 caption:保存着对元素(如果有)的指针。
 tBodies:是一个元素的 HTMLCollection。  tFoot:保存着对元素(如果有)的指针。
 tHead:保存着对元素(如果有)的指针。
 rows:是一个表格中所有行的 HTMLCollection。  createTHead():创建元素,将其放到表格中,返回引用。
 createTFoot():创建元素,将其放到表格中,返回引用。
 createCaption():创建元素,将其放到表格中,返回引用。
 deleteTHead():删除元素。
 deleteTFoot():删除元素。
 deleteCaption():删除元素。
 deleteRow(pos):删除指定位置的行。
 insertRow(pos):向 rows 集合中的指定位置插入一行。

 rows:保存着元素中行的 HTMLCollection。  deleteRow(pos):删除指定位置的行。
 insertRow(pos):向 rows 集合中的指定位置插入一行,返回对新插入行的引用。为元素添加的属性和方法如下。
 cells:保存着元素中单元格的 HTMLCollection。  deleteCell(pos):删除指定位置的单元格。
 insertCell(pos):向 cells 集合中的指定位置插入一个单元格,返回对新插入单元格的引用

使用NodeList

NodeList, NamedNodeMap, HTMLCollection
动态的 跟随文档变化实时变化

这就意味着每次访问
NodeList 对象,都会运行一次查询。有鉴于此,最好的办法就是尽量减少 DOM 操作

异常

try{
	
}catch(err){
	console.info(err)
}
posted @ 2020-04-16 20:26  pengsn  阅读(151)  评论(0)    收藏  举报