💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] * * * * * ### `Node` 类型 DOM中所有节点的父级类型,后面要讲到的几种类型负责实现这一父类型。 ![](https://box.kancloud.cn/d1c5cf1b0ef1e7c8c400e01a797adec3_799x402.png) >node实例有三个常用属性: `nodeType`(可以判断这个节点的类型,是元素、注释或属性等); `nodeName`(元素节点该值为标签名的大写); `nodeValue`(元素节点的该值为null)。 > 判断是不是元素节点 `someNode.nodeType==1`。 节点类型`nodeType`取值有12种,值为均为常量。 每个节点都有一个`childNodes`属性,其中保存这一个`nodeList`对象(实时更新)。 * * * * * ~~~ 读方法: nodeList[index] nodeList.item(index) ~~~ ~~~ 判断有无子节点: node.hasChildNodes( ) ~~~ > 针对节点的操作函数有:增删改、拷贝 ~~~ 插在子元素列表的最后: var returnedNode=someNode.appendChild(newNode) ~~~ ~~~ 在某个位置插入: var returnedNode=someNode.insertBefore(newNode,someChildNode); 如果这里的定位子元素为null,那么就会被插入到最后 ~~~ ~~~ 替换原来已有的元素: var returnedNode=someNode.replaceChild(newNode, someChildNode); ~~~ >[success] 对于上面的三个操作,有个规则,如果该节点已经存在于文档中, 那么此节点会自动从原来的位置移除,出现在新位置上; ~~~ 删除: var returnedNode=someNode.removeChild(someChildNode) 高程3里描述: “替换和删除后,原来的节点还在只是没有了自己的位置 ”,对此我不理解。 ~~~ ~~~ 克隆: var newList=oldList.cloneNode(true/false); true 深拷贝,会把子节点也拷贝上; false 浅拷贝,只是拷贝这个父级元素本身 ~~~ * * * * * **实践:** :-: ![](https://box.kancloud.cn/3d4a65f20f7b104f9ae37996c1c23967_332x230.png) ![](https://box.kancloud.cn/9e3fa694b7dd6752b2dbe6d06c2cbd8d_716x301.png) ![](https://box.kancloud.cn/a76c9bd4a6f19162ff19c0e26c9f4b04_292x263.png) * * * * * ### `Document` 类型 这里关心的是浏览器中与`html`相关的类型(抛开`XML`文档),`HTMLDocument`(继承自`Document`)的实例 `document`对象,其表示整个页面。 ![](https://box.kancloud.cn/a57c8d6ad94fb8018af1c851115bbb9f_191x119.png) ![](https://box.kancloud.cn/470ee38f936c59806679a830a0210140_362x64.png) * * * * * ~~~ document.documentElement 取的HTML的整个引用 方法: .getElementById( ) .getElementsByName( )--可以取出单选元素 如果所求元素不存在就返回null .getElementsByTagName( ) 存在就返回一个 HTMLCollection的实例 读方法: [], item(), namedItem()--通过元素的name属性标识 在引擎处理查询时候, 如果方括号里传入的是数字,就调用 item(), 如果是字符串就调用 namedItem() 特殊集合: .images .links .forms 文档写入(将输出流写入到网页中的能力): write() writeln() (自动带一个换行符) open() close() 打开和关闭网页的输出流, 如果是在页面加载期间则不需要使用这两个方法 ~~~ **实践:** ![](https://box.kancloud.cn/304044596ed3891daa6bf8d50e9192e7_628x138.png) * * * * * ### `Element` 类型 > 用于标识`html`元素,提供了对元素标签名、子节点、及特性的访问 所有`html`元素的直接类型都是`HTMLElement`(区别于`XML`) ~~~ 元素的标准属性,可以直接用点号取出,如 : class,title, name, id, className(有保留字的要做处理,class-->className ) ~~~ ![](https://box.kancloud.cn/89bd395dc332e60098321507b23137e8_607x199.png) ![](https://box.kancloud.cn/950d9036ad18a571c10b0bd651719a36_598x118.png) > 还有一些自定义的属性,只能用 `getAttribute() , setAttribute() , removeAttribute()` 来操作,自定义属性在非严格模式下如果用点号操作,不会报错,但是不起作用;严格模式下,报错 ![](https://box.kancloud.cn/e1023924e29f32b87d9b9dab8c6a6d53_486x61.png) ~~~ 创建元素实例 var div=document.createElement('div'); // 书上看到说是可以通过字符串来创建完整的元素,经试验,不行! div.name .className...... 添加其他属性就用 setAttribute() ~~~ * * * * * ### `Text` 类型 ~~~ var text=document.createTextNode('wdd') div.appendChild(text) 给元素添加文本节点 ~~~ * * * * * ### `DocumentFragment` 类型 ~~~ document.createDocumentFragment(); 相当于生成了一个 temp,把对DOM要做的操作,先预处理在这个片段上, 然后一次性操作,性能更好。 ~~~ * * * * *