当前位置: 代码迷 >> 综合 >> 前端JavaScript-day06 DOM
  详细解决方案

前端JavaScript-day06 DOM

热度:15   发布时间:2023-12-15 18:00:48.0

JavaScript DOM操作

  • 理解DOM的概念和DOM树
  • DOM 节点
  • DOM 写入和查找
  • DOM 操作

DOM的概念

DOM(Document Object Model ,文档对象模型)一种独立于语言,用于操作xml,html文档的应用编程接口。
当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。
在这里插入图片描述
通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML。

  • JavaScript 能够改变页面中的所有 HTML 元素
  • JavaScript 能够改变页面中的所有 HTML 属性
  • JavaScript 能够改变页面中的所有 CSS 样式
  • JavaScript 能够对页面中的所有事件做出反应

DOM树

html标签通过浏览器的解析后才会形成DOM树,此后HTML中的每个标签元素,属性,文本都能看做是一个DOM的节点,JavaScript都能通过DOM的提供的编程接口操作到每个节点.

HTML 代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>dom</title>
</head>
<body><div><a href="www.baidu.com">百度</a></div>
</body>
</html>

对应的DOM树结构

在这里插入图片描述

元素节点

元素节点对应网页的HTML标签元素。
元素节点的节点类型nodeType值是1,节点名称nodeName值是大写的标签名,nodeValue值是null
元素节点查找document.getElementById():返回拥有指定Id的第一个对象引用document.getElementByName():返回带名称的对象集合document.getElementByTagName():返回带有指定标签名的对象的集合document.getElementByClassName():带有指定类名的对象集合区别:第一个方法返回的是元素对象,其余3个方法返回对象集合。如要获取其中一个对象,可以用下标的方式,默认从0开始。

属性节点

元素特性节点attribute对应网页中HTML标签的属性,它只存在于元素的attributes属性中,并不是DOM文档树的一部分
属性节点的节点类型nodeType值是2,节点名称nodeName值是属性名,nodeValue值是属性值.
获取属性节点的方法:getAttributeNode()

文本节点

文本节点text代表网页中的HTML标签内容。

文本节点的节点类型nodeType值是3,节点名称nodeName值是’#text’,nodeValue值是标签内容值.

没有直接的获取方法:可以通过下列属性来获取:

 fristChild :返回当前节点的首个子节点lastChild:返回当前节点最后一个子节点nextSibling:返回同一层级中指定节点之后紧跟着的节点previousSibling:返回同一层级中指定节点之前紧跟着的节点parentNode:返回当前节点的父节点childNodes:元素节点的所有子节点的集合
<body><ul id="myList">hello ChildNodes<li>Item 1</li><li>Item 2</li><li>Item 3</li></ul><script>var element = document.getElementById('myList');alert(element.childNodes.length);</script>
<body>

注释节点(了解)

注释节点COMment表示网页中HTML注释,注释节点的节点类型nodeType的值为8,节点名称nodeNmame的值为#comment。nodeValue的注释的内容

没有直接的获方法,同上

文档节点(了解)

文档节点document表示HTML文档,也成为根节点,指向document对象。
文档节点的节点类型nodeType的值为9,节点名称nodeName的值为#document,nodeValue的值为null

可以通过ownerDocument属性来获取

1.nodeNam节点的名称

元素节点nodeName与标签名相同
属性节点的nodeName是属性的名称
文本节点的nodeName永远是text

2.nodeValue:结点的值

元素节点的nodeValue是undefined货null
文本节点的nodeValue是文本自身
属性节点的nodeValue是属性的值

3nodeType:结点的类型

元素节点1
属性节点2
文本节点3
注释节点8
文档节点9

获取元素内容的属性

innerHTML用于设置获取开始的结束标签之间HTML
innerHTML和document.write()方法在设置内容时有一定的区别,前者作用于指定的元素,后者是重新载入整个HTML的文档页面

操作元素的属性:

利用DOM操作

元素,完成属性的添加,获取,删除,和遍历的操作。
使用style方式设置的样式显示在标签行内

var box = document.getElementById('box');
box.style.width = '100px';
box.style.height = '100px';
box.style.backgroundColor = 'red';

注意:通过样式属性设置宽高、位置的属性类型是字符串,需要加上px
常见的style样式属性:

backgroundbackgroundColorfontSizebackgroundImageborder

自定义属性操作

  • getAttribute(“自定义属性的名字”) 获取自定义属性的值
  • setAttribute(“属性的名字”,“属性的值”); 设置自定义属性的值
  • removeAttribute(“属性的名字”) 移除自定义属性

类名操作

修改标签的className属性相当于直接修改标签的类名

var box = document.getElementById('box');
box.className = 'clearfix';

属性操作

非表单元素的属性

href,title.id.src.className

var link=document.getElementById('link');
console.log(link.href);
console.log(link.title);var pic= document.getElementById('pic');
console.log(pic.src);

表单元素属性

  • value 用于大部分表单元素的内容获取
  • type 可以获取input标签的类型(输入框或复选框等)
  • disabled 禁用属性
  • checked 复选框选中属性
  • selected 下拉菜单选中属性

节点.属性; 获取元素内置属性(元素本身自带的属性)
节点.getAttribute(‘属性’); 主要获得自定义的属性,也就是程序员自定义的属性
节点.属性 = ‘值’; 设置内置属性值
节点.setAttribute(‘属性’,‘值’); 主要针对自定义属性
**节点.removeAttribute("属性名");** 移除指定的属性

节点关系

DOM节点(当前标签和同级、父级、子级…之间的关系)

  • 根节点
  • 父节点
  • 兄弟节点
  • 子节点

节点属性

通过document.getElementByid()方法获取的对象统称为Element对象(元素对象)

DOM节点类型

DOM是JavaScript操作网页的接口,全称为文档对象模型(Document Object Model)。
它的作用是将网页转为一共JavaScript对象,从而可以使用JavaScript对网页进行各种操作(比如增删内容)
浏览器会根据DOM模型,将HTML文档解析成一系列的节点,再由这些节点组成一个树状结构。
DOM的最小组成单位叫做节点(node),文档的树形结构(DOM树)由12种类型的节点组成。

一般地,节点至少拥有nodeType、nodeName和nodeValue这三个基本属性。节点类型不同,这三个属性的值也不相同
在文档对象模型 (DOM) 中,每个节点都是一个对象。DOM 节点有三个重要的属性 :

代码列举

tagName (了解)

tagName 属性返回元素的标签名。在 HTML 中,tagName 属性的返回值始终是大写的。

document.getElementById("demo").tagName;

对元素内容的操作

对象.innerHTML 设置或获取对象起始和结束标签内的内容(识别标签)
对象.innerText 设置或获取对象起始和结束标签内的文字内容(不识别标签)
对象.value 仅作用于表单

文档的写入

innerHTML和document.write()方法是向文档输出写内容。
<html>
<body><script type="text/javascript">document.write("Hello World!");</script></body>
</html>
document.writeln()
writeln() 方法与 write() 方法作用相同,外加可在每个表达式后写一个换行符
<html>
<body>
<pre>
<script>
document.write("Hello World!");
document.write("Have a nice day!");
</script>
</pre><p>注意writeln()方法在每个语句后面新增一行:</p><pre>
<script>
document.writeln("Hello World!");
document.writeln("Have a nice day!");
</script>
</pre>
</body>
</html>

给元素节点常用的属性和方法

给节点添加一个类 node.className = “”
第一个子节点:node.fristChild
最后一个子节点 node.lastChild
下一个兄弟节点 node.nextSibling
上一个兄弟节点 node.previousSibling

给节点设置html内容 node.innerHTML = “”
给节点设置选中状态(单选框) node.checked = true;
给节点设置不选中状态(多选框) node.checked = true;

创建一个节点 document.createElement();
添加一个子节点 父节点.createElement()
插入一个新的节点:父节点.insertBefore(子节点,父节点的fristChild);

节点操作方法

createElement():元素节点的创建
appendChild():指定元素在尾部追加一个子元素
语法:指定元素.appendChild(要添加的元素);

var obox=document.getElementById("box");var  newLi=document.createElement("li");newLi.innerHTML="新增列表项";obox.appendChild(newLi);

insertBefore():此方法可以在指定子节点的前面插入一个新的节点。

指定元素.insertBefore(新元素,指定子节点)

 var obox=document.getElementById("box");var lis=document.getElementsByTagName("li");var  insertedLi=document.createElement("li");insertedLi.innerHTML="插入一行";obox.insertBefore(insertedLi,lis[1]);

获取元素节点的方法

firstElementChild:获取指定元素下第一个子元素节点
lastElementChild:此属性可以返回指定元素的最后一个子元素节点
nextElementSibling:返回当前节点的下一个兄弟元素节点
previousElementSibling:获取节点紧邻的上一个同级元素节点
children:指定元素的子元素集合,只包括元素节点,不包括文本节点等其它节点
  相关解决方案