首页 > 编程语言 >JS的DOM高级编程和动态添加表格行的小案例实现

JS的DOM高级编程和动态添加表格行的小案例实现

时间:2024-09-02 16:55:57浏览次数:13  
标签:node 编程 DOM 元素 innerHTML JS HTML document 节点

DOM高级编程(Document object Modal)

DOM概述

  • DOM-Document Object Modal ,它是W3C国际组织的一套Web标准
  • DOM是一种与浏览器、平台、语言无关的接口
  • Dom认为:html文档中每个成员都是一个节点,根据节点的不同,可分为:
    • 文档节点(document)
    • 元素节点 (element)
    • 属性节点 (attribute)
    • 文本节点 (text)

4种节点,文档节点只有一个

DOM是这样规定的:

  • 整个文档是一个文档节点
  • 每个HTML标签都是一个元素节点
  • 包含在HTML元素中的文本是文本节点
  • 每个HTML属性都是一个属性节点
  • 注释属于注释节点

 HTML DOM中,document对象代表整个HTML文档,可用来访问页面中的所有元素。document对象是window对象的一部分

 document对象在window对象中的示意图

 document对象

  • document对象代表浏览器窗口中加载的整个HTML文档
  • 常用的属性:
名称描述
bgColor页面的背景颜色
documentElement获取对文档根结点(<body>)的引用
title设置或获取页面的标题

例:

	<script>
		//获取系统当前时间
		var now=new Date();
		//获取时间的小时数
		var hour=now.getHours();
		if(hour<12){
		document.bgColor="red";
		}else{
		document.bgColor="yellow";
		}
	</script>
  • 常用方法:
名称描述
write用于向HTML文档中动态写入内容
createElement创建代表某个HTML元素的对象
getElementById获取指定ID的HTML页面元素对象
getElementsByName获取一组指定name的HTML页面元素对象
getElementsByTagName返回所有指定标签名的HTML页面元素对象

document对象访问页面元素的常用方式有四种:

  • document.all.页面元素名称;
  • document.表单名.元素名称;
  • document.getElementById("ID名称");
  • document.getElementsByName("元素名称");

例:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<form name="frm" action="">
			<input type="text" name="username" id="username" value="aaa" />
			<input type="text" name="username" id="name1" value="bbb" />
			<input type="text" name="username" id="name2" value="ccc" />
			<select name="">
				<option value="">111</option>
				<option value="">222</option>
			</select>
		</form>
		<script>
			document.write("<font color=red>222</font>");
			
			//从所有元素中按照元素的名称获得
			console.log(document.all.username.value);
			
			//按照层级关系  document>form表单>表单元素  按照name
			console.log(document.frm.username.value);
			
			//获得名称为name的一组元素的值(数组)
			console.log(document.getElementsByName("username")[2].value);

			//getElementsByTagName和getElementsByName得到的都是数组
			console.log(document.getElementsByTagName("input").length); 
		</script>
	</body>
</html>

节点信息  Node

  • XML DOM 把 XML DOM 文档视为一棵节点树 (node-tree)
  • 树中的所有节点彼此之间都有关系
  • 例如:

  •  常用节点属性
名称描述
childNodes当前节点的所有子节点
firstChild当前节点的所有子节点中第一个节点
lastChild当前节点的所有子节点中最后一个节点
parentNode当前节点的父节点
nodeValue节点值
nodeName节点的名称
nodeType节点的类型
getAttributeNode得到属性节点
  • 常用节点类型
类型描述
元素节点1HTML标签
属性节点2HTML标签中的属性
文本节点3文本信息
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body onl oad="test()">
    	<div  id="first">第一个节点</div>
		<br/>
    	<div  id="last">最后一个节点</div>
	</body>
	<script type="text/javascript">
		function test(){
			alert(document.body.firstChild.nodeType);
			alert(document.body.firstChild.nodeValue);
			alert(document.body.lastChild.nodeType);
			alert(document.body.lastChild.nodeValue);
			}
 </script>
</html>

动态添加和删除节点

  • document文档对象可以创建、添加、删除DOM支持的任何类型的节点
  • 使用document.createElement创建节点
    • document.createElement的功能是创建一个指定标签名的元素节点,标签名可以是任何名字,包括自定义的标签
<script  language="javascript">
    //创建一个新的元素节点
	var  node=document.createElement("div");
    //修改元素节点的内容
	node.innerHTML="这是一个新创建的节点";  
</script>
  •  使用appendChild(node)将节点追加到所有子节点的末尾
function insertNode (strText) {
	    var node = document.createElement("div");
      	node.innerHTML = strText;
        //在body元素下添加一个子元素
      	document.body.appendChild(node);
}
  • 使用insertBefore(newNode,node)将节点newNode插入到节点node之前
 function insertNode (strText) {
        //创建一个新的元素节点
	    var node = document.createElement("div");
        //获取要插入的节点位置
      	var oldNode = document.getElementById("oldNode");
        //设置新的元素节点的内容
      	node.innerHTML = strText;
        //node节点插入在oldNode节点之前
      	document.body.insertBefore(node,oldNode);
}
  • 使用removeChild删除节点
function removeCreateNode() {
	    var node = document.getElementById("textNode");
        //这里的parentNode表示当前节点node的父节点
      	node.parentNode.removeChild(node);
}

innerHTML属性

  • innerHTML是DOM节点的一个属性,它表示节点的开始标签与结标签之间的内容

innerHTML和innerText的区别:

        innerHTML可以解析或得到html标签

        innerText只能获得文本

 例:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div  id="imgContainer">
			<img  src="images/topHat.gif"/>
		</div>
		<input type="button"  value="点我创建图片节点"  onclick="createImg()"/>
	</body>
	<script>
		function createImg(){
				var  container=document.getElementById("imgContainer");
				// container.innerHTML="<img src='img/图片.jpg'/>";
				 container.innerHTML="<img src='图片地址'/>";
				}

	</script>
</html>

DOM学习重点:

1.获得页面元素的方法

        获得单个元素(最常用)

        document.getElementById();

        获得多个元素

        document.getElementsByName();

        document.getElementsByTagName();

        注意:获得的是一个数组

2.创建/删除 节点

        创建节点:

        var testNode=document.createElement(“节点名称”);

        testNode.value/innerHTML=  “value值或者标签”;

        document.body.appendChild(testNode);

        删除节点:

        var testNode = Document.getElementById(“元素id”);

        //通过父节点删除自己

        testNode.parent.removeChild(testNode);

动态添加行案例

需求分析:点击添加一行,上方表格添加一行我们填写的数据(没有添加样式)

 HTML源码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<!-- 动态添加行 -->
	<body>
		<table id="t1" border="1px" cellspacing="0">
			<tr>
				<th>商品名称</th>
				<th>数量(件)</th>
				<th>单价(元)</th>
				<th>运费(元)</th>
				<th>合计</th>
			</tr>
			<tr>
				<td>鼠标</td>
				<td>2</td>
				<td>55</td>
				<td>10</td>
				<td>120</td>
			</tr>
			<tr>
				<td>键盘</td>
				<td>3</td>
				<td>80</td>
				<td>15</td>
				<td>255</td>
			</tr>
		</table>
		<br />
		<form>
			<input type="button" value="添加一行" onclick="add()" /><br />
			商品名称:<input type="text" id="productName" value="" /><br />
			商品数量:<input type="number" id ="productNum" value="" /><br />
			商品单价:<input type="number" id="productPrice" value=""/><br />
			商品运费:<input type="number" id="productRunMoney" value=""/><br />
		</form>
	</body>
	<script>
		//封装一个返回值为document.getElementById()的函数,方便使用
		function $(obj){
			return document.getElementById(obj);
		}
		//添加一行
		function add(){
			//创建tr标签元素对象
			var trNode=document.createElement("tr");
			//使用innerHTML进行内容拼接(可以拼接标签)
			trNode.innerHTML=
			"<td>"+$("productName").value+"</td>"+
			"<td>"+$("productNum").value+"</td>"+
			"<td>"+$("productPrice").value+"</td>"+
			"<td>"+$("productRunMoney").value+"</td>"+
			"<td>"
			+(parseInt($("productNum").value)*parseInt($("productPrice").value)+parseInt($("productRunMoney").value))+
			"</td>";
			//将新创建的tr对象元素添加到table元素下方
			$("t1").appendChild(trNode);
		}
	</script>
</html>

标签:node,编程,DOM,元素,innerHTML,JS,HTML,document,节点
From: https://blog.csdn.net/weixin_52937170/article/details/141821140

相关文章

  • 原生JS实现城市选择(输入提示)组控件
    先看效果图:功能需求:国内城市、国际城市切换首字母索引分类输入变化提示HTML代码<divclass="m-list"><divclass="g-sch"><ulclass="f-cbz-blankhide"><liclass="first"><pclass="u-......
  • Nodejs的安装
    一.下载安装包及安装官网下载: (英文)https://nodejs.org/en(中文)https://nodejs.org/zh-cn/nodejs中文网下载: https://nodejs.cn/以上两个地址都可以下载     查询是否安装成功win+R运行cmd,输入node-v查看  二.配置全局安装目......
  • 2.Linux编程-库
    命名(习惯):静态库:.lib/.a动态库.dll/.so静态库的命名一般分为三个部分:前缀:lib库名称:自定义即可,如test后缀:.a共享库的命名一般分为三个部分:前缀:lib库名称:自己定义即可,如test后缀:.so库制作完成后,如何给用户使用头文件—包含了库函数的声明库文件—包含了库函数的代......
  • springboot 编程事务的封装
    一、创建事务管理工具类java复制importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Component;importorg.springframework.transaction.PlatformTransactionManager;importorg.springframework.transaction.Transact......
  • 基于SpringBoot+MySQL+SSM+Vue.js的学生选课系统
    获取见最下方名片获取见最下方名片获取见最下方名片演示视频基于SpringBoot+MySQL+SSM+Vue.js的学生选课系统(附论文)技术描述开发工具:Idea/Eclipse数据库:MySQLJar包仓库:Maven前端框架:Vue/ElementUI后端框架:Spring+SpringMVC+Mybatis+SpringBoot文字描......
  • 【话题讨论】VS Code:倍增编程动力,实现效率飞跃
      目录引言一、详情介绍功能特点使用场景提高工作效率二、效率对比2.1高度可定制性与丰富的插件生态2.2智能的代码补全与导航2.3 内置的调试器与版本控制集成2.4 轻量级与跨平台2.5选择合适工具的重要性2.6实际案例或数据展示三、未来趋势3.1编程工具......
  • jsp班级班费缴纳及使用情况管理56jy4
    jsp班级班费缴纳及使用情况管理56jy4本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能学生,教师,通知公告,班级信息,班费通知,班费统计,使用情况技术要求:   开发语言:JSP前端使用:HTML5,CSS,JSP动......
  • jsp班级财务管理系统m9ttl
    jsp班级财务管理系统m9ttl本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能班级信息,学生,教师,班费信息,日常开销开题报告内容一、项目背景与意义在现代化教育体系中,班级作为学校的基本组成单元,其......
  • 【vue、react】前端如何为package.json添加注释
    文章目录前言安装使用方法问题前言写了个项目,想给package.json加注释结果发现加不上去,就在网上查找了相关文章,特意总结记录一下,防止下次使用。参考文章:如何为package.json添加注释众所周知,JSON文件是不支持注释的,除了JSON5/JSONC之外,我们在开发项目特别是前端项目......
  • 一个练习项目,好玩的bbs-nodejs-restify
    代码:varrestify=require('restify')varserver=restify.createServer()constmd5=require('md5');constquerystring=require('querystring');//npminstallrestifyvarsecretKey='saacac3423@21212';varpagesize......