DOM

2019-08-26  本文已影响0人  zooeydotmango

文档对象模型 (DOM) 是HTML和XML文档的编程接口。它给文档(结构树)提供了一个结构化的表述并且定义了一种方式—程序可以对结构树进行访问,以改变文档的结构,样式和内容。

DOM 提供了一种表述形式将文档作为一个结构化的节点组以及包含属性和方法的对象。从本质上说,它将web 页面和脚本或编程语言连接起来了。

每个载入浏览器的HTML文档都会成为document对象。document对象包含了文档的基本信息,我们可以通过JavaScript对HTML页面中的所有元素进行访问、修改。

document对象常用属性


 document.doctype
 document.title
 document.characterSet
 document.head
 document.body
 document.images

 /*了解
 readyState属性返回当前文档的状态,共有三种可能的值

 1. loading:加载HTML代码阶段,尚未完成解析
 2. interactive:加载外部资源阶段
 3. complete:全部加载完成
 */
 document.readyState

 /*了解
 compatMode 属性返回浏览器处理文档的模式,可能的值为
 1. BackCompat:向后兼容模式,也就是没有添加DOCTYPE
 2. CSS1Compat:严格模式,添加了DOCTYPE
 */
 document.compatMode

document.location

document.location 也可直接使用 location,location属性返回一个只读对象,提供了当前文档的URL信息

// 假定当前网址为http://user:passwd@www.example.com:4097/path/a.html?x=111#part1

document.location.href // "http://user:passwd@www.example.com:4097/path/a.html?x=111#part1"
document.location.protocol // "http:"
document.location.host // "www.example.com:4097"
document.location.hostname // "www.example.com"
document.location.port // "4097"
document.location.pathname // "/path/a.html"
document.location.search // "?x=111"
document.location.hash // "#part1"
document.location.user // "user"
document.location.password // "passed"

// 跳转到另一个网址
document.location.assign('http://www.google.com')
// 优先从服务器重新加载
document.location.reload(true)
// 优先从本地缓存重新加载(默认值)
document.location.reload(false)
// 跳转到另一个网址,但当前文档不保留在history对象中,
// 即无法用后退按钮,回到当前文档
document.location.assign('http://www.google.com')
// 将location对象转为字符串,等价于document.location.href
document.location.toString()

虽然location属性返回的对象是只读的,但是可以将URL赋值给这个属性,网页就会自动跳转到指定网址。

document.location = 'http://www.example.com';
// 等价于
document.location.href = 'http://www.example.com';

document.open()、document.close()

document.open方法用于新建一个文档,供write方法写入内容。它实际上等于清除当前文档,重新写入内容

document.close方法用于关闭open方法所新建的文档。一旦关闭,write方法就无法写入内容了。

document.write()

document.write方法用于向当前文档写入内容。只要当前文档还没有用close方法关闭,它所写入的内容就会追加在已有内容的后面。

需要注意的是,虽然调用close方法之后,无法再用write方法写入内容,但这时当前页面的其他DOM节点还是会继续加载。

除了某些特殊情况,应该尽量避免使用document.write这个方法。

Element/Node


除了document对象,在DOM中最常用的就是Element对象了,Element对象表示HTML元素。

Element 对象可以拥有类型为元素节点、文本节点、注释节点的子节点,DOM提供了一系列的方法可以进行元素的增、删、改、查操作

Element有几个重要属性

查询元素

创建元素

修改元素

删除元素

clone元素

用于克隆元素,方法有一个布尔值参数,传入true的时候会深复制,也就是会复制元素及其子元素(IE还会复制其事件),false的时候只复制元素本身

node.cloneNode(true);

属性操作


innerText与innerHTML

常用方法


修改样式

document.querySelector('p').style.color = 'red';

获取样式 getComputedStyle

var node = document.querySelector('p')
var color = window.getComputedStyle(node).color
console.log(color)

class操作

var nodeBox = document.querySelector('.box')
console.log( nodeBox.classList )
nodeBox.classList.add('active')   //新增 class
nodeBox.classList.remove('active')  //删除 class
nodeBox.classList.toggle('active')   //新增/删除切换
node.classList.contains('active')   // 判断是否拥有 class

样式的改变尽量使用 class 的新增删除来实现

页面宽高

三种高度

HTMLCollection 和 NodeList


节点都是单个对象,有时会需要一种数据结构,能够容纳多个节点。DOM提供两种集合对象,用于实现这种节点的集合:NodeList和HTMLCollection。

NodeList 对象代表一个有顺序的节点列表,HTMLCollection 是一个接口,表示 HTML 元素的集合,它提供了可以遍历列表的方法和属性

以下方法获取的为HTMLCollection对象

document.images //所有img元素
document.links //所有带href属性的a元素和area元素
document.forms //所有form元素
document.scripts //所有script元素
document.body.children
document.getElementsByClassName("class1")

以下方法获取的为NodeList对象

document.getElementsByName("name1")
document.getElementsByTagName("a")
document.querySelectorAll("a")
document.body.childNodes

如何查看?

document.body.childNodes.constructor
HTMLCollection与NodeList基本相似

相同点: 都是类数组对象,节点的变化都会实时反映在集合中

不同点: 少部分方法不一样,比如 NodeList 有 forEach 方法,而 HTMLCollection 没有

上一篇下一篇

猜你喜欢

热点阅读