javascript(五):DOM API

168 阅读3分钟

DOM

(xml)Document Object Model

html的结构

html结构和object的对象是一一对应的
根据页面的元素创造出内存,HTML由document造,其他的标签由element造,文本由text造
类似于Object的原型链,所有的属性都是由Node节点创造出来的

页面中的所有标签都有一个对应的构造函数(就是返回对象的函数),浏览器只要看到一个标签,就用对应的构造函数给它构造出来对应的内存中的对象。

打印出来的不是字符串而是Object

页面中的节点通过上图中的4种构造函数构造出对应的对象,这就是dom的主要功能。

需要操作一个节点,DOM把每个节点变成一个对象,想操作哪个对象就调用哪个对象的API

##API举例

有很多的text,因为text的内容是回车

节点

cloneNode()深拷贝和浅拷贝

传入参数true,子元素全部递归的被克隆。

isEqualNode与isSameNode

Equal相等的,same相同的(===)

特殊记忆

  1. previousSibling和nextSibling可能会获取到text文本(包括空格回车)
  2. (考)innerText和textContent是有细微的差别的(历史原因浏览器打架)
  3. (考)nodeType死记硬背1表示元素,3表示文本
  4. clone接受参数值(true false)true深拷贝,flase浅拷贝
  5. isEqual和isSame,前者文本内容相等,后者完全相等
  6. normalize是常规化把不正常的东西变为正常的

Document接口

referrer 引荐人

在浏览器的Network中可以查看,如果没有referrer单独访问域名可能会被服务器给拒绝。

document先open→write→clone,在关闭了之后如果想要继续write,就会把原来的内容给覆盖掉。

写write一定不要出现在延时性和异步的操作里面

##document.querySelector(all)

返回一个伪数组(即使只有一个元素)(__proto__指向NodeList),和arguments一样都是伪数组,同时DOM API获取的数组都是伪数组

innerText和innerHTML

区别就是安不安全的问题,就是你的代码会不会产生后果。 理论上来说所有的前端都不要使用innerHTML,他会把用户写的标签执行,如果用户写<script>内容</script>就会执行,而innerText不会。

题目

id是window的全局变量,全局变量是定义好的,不可以使用。全局属性会覆盖,(var 全局属性词语会覆盖window的此词语全局属性,id=全局属性会获取不到值)(var会变量提升成为全局变量,即使在代码块中也是这样。代码块包不住var,只有立即执行函数才行,或者使用let),所以我们要1. 不用全局属性。2. 可以使用局部变量(声明一个函数,然后立即.call()调用这个函数)4.会被认为语法错误,

真实的原因是,allDiv已经取在内存中了,这是再对DOM进行操作,需要重新取才可以的!