DOM概念

本文详细介绍了DOM操作中的关键方法,包括获取子节点、兄弟节点、父节点等,以及元素的创建、删除与替换,并探讨了不同浏览器下的兼容性问题。

一、元素.childNodes: 只读 属性 子节点列表集合×有兼容性的问题

标准下: 包含了文本和元素类型的节点,也包含非法嵌套的子节点

非标准下:  只包含了元素类型的节点,IE7以下不会包含非法嵌套的子节点

childNodes只包含一级子节点,不包含后辈孙级以下的节点

DOM节点的类型一共有12种

元素.nodeType:只读属性 当前元素的节点类型

元素节点 1

属性节点 2

文本节点 3

元素.attributes :只读 属性 属性列表集合

alert(xxx.attributes.length);

alert(xxx.attributes[].nodeType);


二、元素.children: 只读 属性  子节点列表集合√  推荐使用

标准下: 包含元素类型的节点

非标准下:包含元素类型的节点


三、元素.firstChild: 只读  属性  第一个子节点×有兼容性问题

标准下:firstChild包含文本类型的节点

非标准下:firstChild只包含元素节点

元素.firstElementChild:只读  属性  标准下获取第一个元素类型的子节点

var aFirst = xxx.firstElementChild || xxx.firstChild;

元素.lastChild|| 元素.lastElementChild获取最后一个元素类型的子节点


四、元素.nextSibling  ||  元素.nextElementSibling 获取下一个兄弟节点

var aNext = aFirst.nextElementSibling || aFirst.nextSibling;


五、元素.previousSibling  ||  元素.previousElementSibling上一个兄弟节点

var aPrev = aLast.previousElementSibling || aLast.previousSibling;


六、元素.parentNode: 只读   属性当前节点的父级节点√没有兼容问题


七、元素.offsetParent:  只读   属性 离当前元素最近一个有定位的父级节点

如果没有定位父级节点,默认的是body

IE7以下,如果当前元素没有定位默认是body,如果有定位则是html

八、元素.offsetLeft[Top]:只读   属性   当前元素到定位父级的距离(偏移值)

 取值:到当前元素的offsetParent的距离


九、元素.clientWidth[Height]:可视区的宽度(样式宽+padding) 不带单位

元素.offsetWidth[Height]: 占位宽(样式宽+padding+border)不带单位

//当前元素获取到页面顶部的距离

var iTop = 0,

      obj   = 元素节点(div);

while(obj){

iTop += obj.offsetTop;

obj = obj.offsetParent;

}

console.log(iTop);

//封装

var p = getPos(div);

function getPos(obj){

var pos = {left:0, top:0};

while(obj){

pos.left += obj.offsetLeft;

pos.top += obj.offsetTop;

obj = obj.offsetParent;

}

return pos;

}


十、元素动态创建 1).var oLi = document.createElement(标签名称);

2).oLi.innerHTML = oText.vale;

3).oUl.appendChild(oLi);

父级.insertBefore(新元素,被插入的元素) 方法 在指定元素前面插入一个新元素.

在IE下如果第二个参数的节点不存在,会报错

在标准下会以appendChild的形式进行添加

if(oUl.children[0]){

oUl.insertBefore(oLi,oUl.children[0]);

}else{

oUl.appendChild(oLi);

}

十一、元素动态删除   父级.removeChild(要删除的元素);

var oA = document.createElement('a');

oA.innerHTML = '删除';

oA.href = 'javascript:;';

oA.onclick = function (){

oUl.removeChild(this.parentNode);

}

十二、元素替换节点   父级.replaceChild(新节点,被替换节点)


appendChild,insertBefore,replaceChild都可以操作动态创建出来的节点,也可以操作已有节点

JavaScript 中的 DOM(Document Object Model,文档对象模型)是网页编程中的核心概念之一,它将 HTML 或 XML 文档表示为一个树状结构,其中每个节点都是文档中的一个部分(如元素、属性、文本等)。通过 DOM,开发者可以使用 JavaScript 动态地访问、修改、添加或删除页面中的内容、结构和样式。 ### DOM 的基本结构 DOM 将 HTML 文档解析为一个由节点组成的树形结构,称为文档树。每个节点可以是元素节点、属性节点、文本节点等。例如,`<div>` 标签对应一个元素节点,其 `id` 或 `class` 属性则对应属性节点,而标签之间的文本内容则对应文本节点。 DOM 的根节点是 `document` 对象,它是访问整个文档结构的入口点。通过 `document` 可以访问和操作页面上的任何节点。 ### DOM 操作的核心方法 DOM 提供了多种方法来选择和操作元素节点。以下是一些常见的 DOM 操作方法: - **根据 ID 获取元素**:`document.getElementById(id)` 返回一个匹配指定 ID 的元素节点。 - **根据标签名获取元素集合**:`document.getElementsByTagName(tagName)` 返回一个包含所有匹配指定标签名的元素的 HTMLCollection。 - **根据类名获取元素集合**:`document.getElementsByClassName(className)` 返回一个包含所有匹配指定类名的元素的 NodeList。 - **根据 CSS 选择器获取第一个匹配元素**:`document.querySelector(selector)` 返回第一个匹配指定 CSS 选择器的元素。 - **根据 CSS 选择器获取所有匹配元素**:`document.querySelectorAll(selector)` 返回一个包含所有匹配指定 CSS 选择器的元素的 NodeList。 ### DOM 属性操作 DOM 允许读取、修改或删除 HTML 元素的属性。常用的方法包括: - **获取属性值**:`element.getAttribute(attributeName)` 用于获取指定属性的值。 - **设置属性值**:`element.setAttribute(attributeName, value)` 用于设置指定属性的值。 - **移除属性**:`element.removeAttribute(attributeName)` 用于移除指定属性。 例如,可以通过 `element.setAttribute("class", "new-class")` 来动态更改元素的类名,从而应用新的样式。 ### 动态创建和操作 DOM 节点 除了对现有 DOM 节点进行操作外,还可以动态创建新的节点并将其插入到文档中: - **创建元素节点**:`document.createElement(tagName)` 创建一个新的元素节点。 - **创建文本节点**:`document.createTextNode(text)` 创建一个新的文本节点。 - **将子节点添加到父节点中**:`parentNode.appendChild(childNode)` 将指定的子节点添加到父节点的子节点列表的末尾。 - **在指定子节点前插入新节点**:`parentNode.insertBefore(newNode, referenceNode)` 在指定的参考节点前插入新节点。 ### 示例:动态修改页面内容 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>DOM 操作示例</title> </head> <body> <div id="container"></div> <button onclick="addContent()">点击添加内容</button> <script> function addContent() { // 创建一个新的段落元素 var newParagraph = document.createElement("p"); // 创建文本节点 var textNode = document.createTextNode("这是通过 JavaScript 动态添加的内容。"); // 将文本节点添加到段落元素中 newParagraph.appendChild(textNode); // 获取容器元素 var container = document.getElementById("container"); // 将段落元素添加到容器中 container.appendChild(newParagraph); } </script> </body> </html> ``` ### DOM 的作用与意义 DOM 不仅提供了访问和操作文档内容的能力,还为网页的动态交互提供了基础。通过结合事件处理(如 `onclick`、`onmouseover` 等),可以实现丰富的用户交互效果。此外,现代前端框架(如 React、Vue.js 等)虽然抽象了 DOM 操作,但其底层依然依赖于 DOM API。 DOM 的灵活性和强大功能使其成为前端开发不可或缺的一部分。掌握 DOM 操作是构建动态网页和实现复杂交互逻辑的关键[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值