第120篇: DOM编程(常用操作、动态脚本、样式及动态表格)

dom,编程,常用,操作,动态,脚本,样式,表格 · 浏览次数 : 163

小编点评

**DOM操作** DOM操作是 JavaScript 中用于访问和控制 HTML 页面元素的工具。它可以通过各种方法访问页面元素,并使用这些元素进行各种操作,例如创建新元素、设置元素属性和样式等。 **DOM操作步骤** 1. **获取元素**:可以使用 `document.getElementById()` 或 `document.getElementsByTagName()` 等方法获取元素。 2. **设置元素属性和样式**:可以使用 `element.setAttribute()` 和 `element.style` 对象设置元素属性和样式。 3. **插入新元素**:可以使用 `element.appendChild()` 方法将新元素插入文档树中。 4. **删除元素**:可以使用 `element.removeChild()` 方法删除元素。 5. **更新元素**:可以使用 `element.innerHTML` 或 `element.outerHTML` 属性更新元素的 HTML 内容。 **DOM操作示例** ```javascript // 获取所有 table 元素 const table = document.querySelectorAll("table"); // 获取第一个 table 元素的 tbody 元素 const tbody = table[0].querySelector("tbody"); // 创建新的 tr 元素 const row = document.createElement("tr"); // 创建新的 td 元素并设置属性 const cell = document.createElement("td"); cell.setAttribute("rowspan", 2); cell.innerHTML = "Cell 1,2"; row.appendChild(cell); // 将新行添加到 tbody 元素 tbody.appendChild(row); ``` **DOM操作重要性** DOM操作是 JavaScript 中非常重要的工具,可以帮助您: * 创建和设置 HTML 元素 * 访问和控制页面元素 * 创建和修改表格 * 处理 DOM 事件 * 构建复杂的 HTML 页面

正文

好家伙,我回来了,

本篇为《JS高级程序设计》第十四章“DOM编程”学习笔记

 

1.DOM编程

我们知道DOM是HTML文档的编程接口,

我们可以通过HTML代码实现DOM操作,

同样能够通过JavaScript实现DOM操作

 

2.JS操作DOM

我们来简单的举个例子:

随便开一个空白的html页面

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>  
    <div>
        <h1>来试试使用js实现dom操作吧
        </h1>
    </div>
</body>
</html>

效果如下:

 

此处我们直接在html元素中进行操作,在页面中添加了一行标题(

  <div>
        <h1>来试试使用js实现dom操作吧
        </h1>
    </div>

 

接下来我们使用JS进行相同的DOM操作

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>  
    <!-- <div>
        <h1>来试试使用js实现dom操作吧
        </h1>
    </div> -->
</body>
<script>
    //创建div元素
    let div =document.createElement('div')
    //创建h1元素
    let h1 =document.createElement('h1')
    //创建文本元素
    let text1 = document.createTextNode('来试试使用js实现dom操作吧')
    //将文本元素添加到h1中
    h1.appendChild(text1)
    //将h1添加到div元素中
    div.appendChild(h1);
    //将该div元素挂载到body下
    document.body.appendChild(div);
</script>
</html>

 

我们实现了同样的效果

 

3.动态脚本

<script>元素用于向网页中插入 JavaScript 代码,可以是 src 属性包含的外部文件,也可以是作为该
元素内容的源代码。动态脚本就是在页面初始加载时不存在,之后又通过 DOM 包含的脚本。与对应的
HTML 元素一样,有两种方式通过<script>动态为网页添加脚本:引入外部文件和直接插入源代码。

       

  3.1.进行动态加载

<script src="plane.js"></script>

  

  3.2.通过DOM编程创建这个节点

let script = document.createElement("script"); 
script.src = "plane.js"; 
document.body.appendChild(script); 

(DOM编程农夫三拳:1.新建节点,2.某些操作,3.挂载到父节点上)

  

  我们把上述过程抽象成一个函数

function loadScript(url) { 
 let script = document.createElement("script"); 
 script.src = url; 
 document.body.appendChild(script); 
} 

loadScript("plane.js");
//外部文件名作为参数

(便于使用)

 

  3.3.script的text属性

现在就有人会想了,如果我有一大串方法或者函数,该怎么处理:

<script> 
 function dosomething() { 
 alert("hi"); 
 }
dosomething(); 
</script>

 

js开发者早就替我们想好了,<script>元素上有一个 text 属性,可以用来添加 JavaScript 代码

  let script = document.createElement("script");
    script.text = "function dosomething(){alert('hi');} dosomething()";
    document.body.appendChild(script);

 

4.动态样式

CSS 样式在 HTML 页面中可以通过两个元素加载。<link>元素用于包含 CSS 外部文件,而<style>
元素用于添加嵌入样式。

4.1.<link>导入

<link rel="stylesheet" type="text/css" href="styles.css">

DOM编程:

function loadStyles(url){ 
 let link = document.createElement("link"); 
 link.rel = "stylesheet"; 
 link.type = "text/css"; 
 link.href = url; 
 let head = document.getElementsByTagName("head")[0]; 
 head.appendChild(link); 
} 

 

4.2.<style>元素

 

<style type="text/css"> 
body { 
 background-color: red; 
} 
</style> 

DOM编程:

let style = document.createElement("style"); 
style.type = "text/css"; 
style.appendChild(document.createTextNode("body{background-color:red}")); 
let head = document.getElementsByTagName("head")[0]; 
head.appendChild(style);

 

 

5.DOM操作表格:

HTML 中最复杂的结构之一,通常要涉及大量标签,其相应DOM操作也十分复杂

<table border="1" width="100%"> 
   <tbody> 
     <tr> 
       <td>Cell 1,1</td> 
       <td>Cell 2,1</td> 
     </tr> 
     <tr> 
       <td>Cell 1,2</td> 
       <td>Cell 2,2</td> 
     </tr> 
   </tbody> 
</table> 

以这个表格为例

// 创建表格
let table = document.createElement("table"); 
table.border = 1; 
table.width = "100%"; 
// 创建表体
let tbody = document.createElement("tbody"); 
table.appendChild(tbody); 
// 创建第一行
let row1 = document.createElement("tr"); 
tbody.appendChild(row1); 
let cell1_1 = document.createElement("td"); 
cell1_1.appendChild(document.createTextNode("Cell 1,1")); 
row1.appendChild(cell1_1); 
let cell2_1 = document.createElement("td"); 
cell2_1.appendChild(document.createTextNode("Cell 2,1")); 
row1.appendChild(cell2_1); 
// 创建第二行
let row2 = document.createElement("tr"); 
tbody.appendChild(row2); 
let cell1_2 = document.createElement("td"); 
cell1_2.appendChild(document.createTextNode("Cell 1,2")); 
row2.appendChild(cell1_2); 
let cell2_2= document.createElement("td"); 
cell2_2.appendChild(document.createTextNode("Cell 2,2")); 
row2.appendChild(cell2_2); 
// 把表格添加到文档主体
document.body.appendChild(table); 

(看的眼都花了,八个标签不停套娃,DOM操作十分复杂)

于是,为了方便创建表格,HTML DOM 给、和 元素添加了一些属性和方法。

 

<table>元素添加了以下属性和方法:
 caption,指向<caption>元素的指针(如果存在);
 tBodies,包含<tbody>元素的 HTMLCollection;
 tFoot,指向<tfoot>元素(如果存在);
 tHead,指向<thead>元素(如果存在);
 rows,包含表示所有行的 HTMLCollection;
 createTHead(),创建<thead>元素,放到表格中,返回引用;
 createTFoot(),创建<tfoot>元素,放到表格中,返回引用;
 createCaption(),创建<caption>元素,放到表格中,返回引用;
 deleteTHead(),删除<thead>元素;
 deleteTFoot(),删除<tfoot>元素;
 deleteCaption(),删除<caption>元素;
 deleteRow(pos),删除给定位置的行;
 insertRow(pos),在行集合中给定位置插入一行。
<tbody>元素添加了以下属性和方法:
 rows,包含<tbody>元素中所有行的 HTMLCollection;
 deleteRow(pos),删除给定位置的行;
 insertRow(pos),在行集合中给定位置插入一行,返回该行的引用。
<tr>元素添加了以下属性和方法:
 cells,包含<tr>元素所有表元的 HTMLCollection;
 deleteCell(pos),删除给定位置的表元;
 insertCell(pos),在表元集合给定位置插入一个表元,返回该表元的引用
// 创建表格
let table = document.createElement("table"); 
table.border = 1; 
table.width = "100%"; 
// 创建表体
let tbody = document.createElement("tbody"); 
table.appendChild(tbody); 

// 创建第一行 tbody.insertRow(0); //插入单元 tbody.rows[0].insertCell(0); //单元插入元素 tbody.rows[0].cells[0].appendChild(document.createTextNode("Cell 1,1")); tbody.rows[0].insertCell(1); tbody.rows[0].cells[1].appendChild(document.createTextNode("Cell 2,1")); // 创建第二行 tbody.insertRow(1); tbody.rows[1].insertCell(0); tbody.rows[1].cells[0].appendChild(document.createTextNode("Cell 1,2")); tbody.rows[1].insertCell(1); tbody.rows[1].cells[1].appendChild(document.createTextNode("Cell 2,2")); // 把表格添加到文档主体 document.body.appendChild(table);

这样一看,整个表格的DOM操作变得十分明了,且逻辑清晰

 

 

6.小结

感觉DOM操作是整个JS学习线路上非常重要的一环,这个感觉重要到就属于是别人默认你会的那种,还是得记一记.

比如某一天你要给别人写包了,被人给你一个div,然后你不会操作,就很尴尬.所以还是得学

与第120篇: DOM编程(常用操作、动态脚本、样式及动态表格)相似的内容:

第120篇: DOM编程(常用操作、动态脚本、样式及动态表格)

好家伙,我回来了, 本篇为《JS高级程序设计》第十四章“DOM编程”学习笔记 1.DOM编程 我们知道DOM是HTML文档的编程接口, 我们可以通过HTML代码实现DOM操作, 也同样能够通过JavaScript实现DOM操作。 2.JS操作DOM 我们来简单的举个例子: 随便开一个空白的html页

第一百零五篇:变量的原始值和引用值

好家伙,JS基础接着学, 本篇内容为《JS高级程序设计》第四章学习笔记 1.原始值和引用值 ECMAScript变量可以包含两种不同类型的数据:原始值和引用值。原始值(primitive value)就是最简单的数据,引用值(reference value)则是由多个值构成的对象。 在把一个值赋给变

第一百零六篇:变量的不同声明(var,let和const的不同)

JS关于变量的声明,变量提升,暂时性死区

第一百零七篇:基本数据类型(undefined,null,boolean类型)

好家伙, 本篇内容为《JS高级程序设计》第三章学习笔记 1.数据类型 ECMAScript有6种简单数据类型(称为原始类型): Undefined, Null, Boolean, Number, String和Symbol。 Symbol (符号)是ECMAScript6新增的。还有一种复杂数据类型

第一百零八篇:最常用的基本数据类型(Number类型)

最常用的基本数据类型(Number类型)

第一百一十篇:内存泄漏和垃圾回收(JS)

好家伙,本篇内容为《JS高级程序设计》第四章的学习笔记 1.内存泄露 1.1.什么是内存泄漏? 内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。 内存泄漏缺陷具有隐蔽性、积累性的特征,比其

第一百一十一篇:基本引用类型Date

好家伙,本篇为《JS高级程序设计》第五章的学习笔记 1.基本引用类型 引用值(或者对象)是某个特定引用类型的实例,在ECMAScript中,引用类型是把数据和功能组织到一起的结构,(像极了“类”) 经常被人错误的称作“类”。 虽然从技术上讲JavaScript是一门面向对象语言,但是ECMAScri

第一百一十二篇: JS数组Array(一)数组基本用法

好家伙, 1.数组 Array应该就是ECMAScript中最常用的类型了。ECMAScript数组跟其他编程语言的数组有很大区别。 跟其他语言中的数组一样,ECMAScript 数组也是一组有序的数据, 但跟其他语言不同的是,数组中每个槽位可以存储任意类型的数据。 这意味着可以创建一个数组,它的第

第一百一十四篇: JS数组Array(三)数组常用方法

好家伙,本篇为《JS高级程序设计》第六章“集合引用类型”学习笔记 1.数组的复制和填充 批量复制方法 copyWithin(),以及填充数组方法fill()。 这两个方法的函数签名类似,都需要指定既有数组实例上的一个范围,包含开始索引,不包含结束索引。 使用这个方法不会改变数组的大小。 1.1.fi

第一百一十五篇: JS集合引用类型Map

好家伙,本篇为《JS高级程序设计》第六章“集合引用类型”学习笔记 1.Map ECMAScript6以前,在JavaScript中实现“键/值”式存储可以使用object来方便高效地完成,也就是使用对象属性作为键,再使用属性来引用值。 但这种实现并非没有问题,为此TC39委员会专门为“键/值”存储定