Web程序设计-实验05 DOM与BOM编程

news2024/11/16 5:22:04

题目

【实验主题】

影视网站后台影视记录管理页设计

【实验任务】

1、浏览并分析多个网站后台的列表页面、编辑页面(详见参考资源,建议自行搜索更多后台页面)的主要元素构成和版面设计,借鉴并构思预期效果。

2、新建 index.html文件,合理运用HTML标记编写2个单元:[影视记录列表]、[记录编辑表单]。

1)[影视记录列表]建议用表格<table>系列标记组织,字段至少包含海报(显示缩略图)、影视名称、影视类别等,其余字段自行设计;同时包含 [操作]列,此列需有 [编辑]、[删除]2个超链接或者按钮。

2)[记录编辑表单]除了包含列表中的字段,还可添加剧情介绍等字段,同时包含 [保存]按钮。

3)在页面的恰当位置添加1个 [添加]超链接或者按钮。

4)页面初始打开时,列表应已经有至少 3条记录。

5)合理编写CSS样式,对列表、表单美化排版。

3、新建 .js文件,实现影视记录的增删改功能。

1)单击 [影视记录列表]某记录的 [删除],将显示确认对话框,得到确认后删除表中对应记录。

2)单击 [影视记录列表]某记录的 [编辑],表中对应记录的各字段值将填写到 [记录编辑表单]相应表单域;单击 [保存]按钮后将首先做字段非空等数据合规性校验,校验不通过则提示更正,通过则更新表中对应记录。

3)单击 [添加],清空 [记录编辑表单]各表单域;单击 [保存]按钮后将首先做字段非空等数据合规性校验,校验不通过则提示更正,通过则添加至列表。

4、(选做)与后端服务器数据同步。

1)在页面的恰当位置添加 [同步]和 [刷新]超链接或者按钮。

2)单击 [同步],以Ajax方式将列表全部记录同步至后端服务器。

提示1:Ajax工具集见下面的【实验提示】说明。

提示2:除了appKey参数,其余自定义参数建议尝试 post方式提交。

3)单击 [刷新],将刷新(重新加载)页面;编写页面初始化事件处理函数,以Ajax方式从后端获取数据,并呈现至 [影视记录列表]。

window.οnlοad=function(){

  //todo: 以Ajax方式从后端获取数据,初始化 [影视记录列表]

};

效果图展示

文件内容

index.html文件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>后台影视记录管理</title>
		<link rel="stylesheet" href="style.css" />
		<script src="script.js"></script>
	</head>
	<body>
		<div class="recordlist">
			<h1>影视记录列表</h1>
			<table id="myTable">
				<tr>
					<th>海报</th>
					<th>影视名称</th>
					<th>影视类型</th>
					<th>影视主演</th>
					<th>简介</th>
					<th>操作</th>
				</tr>
				<tr>
					<td><img class="poster" src="1.png" alt="星际穿越" /></td>
					<td>星际穿越</td>
					<td>剧情/科幻/冒险</td>
					<td>
						马修·麦康纳 / 安妮·海瑟薇 / 杰西卡·查斯坦 / 麦肯吉·弗依 / 卡西·阿弗莱克 / 迈克尔·凯恩 / 马特·达蒙 / 提莫西·查拉梅 / 艾伦·伯斯汀
					</td>
					<td>
						<textarea name="description" cols="25" rows="15">
							近未来的地球黄沙遍野,小麦、秋葵等基础农作物相继因枯萎病灭绝,人类不再像从前那样仰望星空,放纵想象力和灵感的迸发,而是每日在沙尘暴的肆虐下倒数着所剩不多的光景。在家务农的前NASA宇航员库珀(马修·麦康纳 Matthew McConaughey 饰)接连在女儿墨菲(麦肯吉·弗依 Mackenzie Foy 饰)的书房发现奇怪的重力场现象,随即得知在某个未知区域内前NASA成员仍秘密进行一个拯救人类的计划。多年以前土星附近出现神秘虫洞,NASA借机将数名宇航员派遣到遥远的星系寻找适合居住的星球。在布兰德教授(迈克尔·凯恩 Michael Caine 饰)的劝说下,库珀忍痛告别了女儿,和其他三名专家教授女儿艾米莉亚·布兰德(安妮·海瑟薇 Anne Hathaway 饰)、罗米利(大卫·吉雅西 David Gyasi 饰)、多伊尔(韦斯·本特利 Wes Bentley 饰)搭乘宇宙飞船前往目前已知的最有希望的三颗星球考察。
							他们穿越遥远的星系银河,感受了一小时七年光阴的沧海桑田,窥见了未知星球和黑洞的壮伟与神秘。在浩瀚宇宙的绝望而孤独角落,总有一份超越了时空的笃定情怀将他们紧紧相连……
						</textarea>
					</td>
					<td>
						<a href="#" class="edit-btn" onclick="editRow(this)">编辑</a>
						<a href="#" onclick="deleteRow(this)">删除</a>
					</td>
				</tr>
				<tr>
					<td><img class="poster" src="2.png" alt="这个杀手不太冷" /></td>
					<td>这个杀手不太冷</td>
					<td>剧情/动作/ 犯罪</td>
					<td>
						让·雷诺 / 娜塔莉·波特曼 / 加里·奥德曼 / 丹尼·爱罗 / 彼得·阿佩尔 / 迈克尔·巴达鲁科 / 艾伦·格里尼 / 伊丽莎白·瑞根 / 卡尔·马图斯维奇 / 弗兰克·赛格 / 麦温

					</td>
					<td>
						<textarea name="description" cols="25" rows="15">
							里昂(让·雷诺饰)是名孤独的职业杀手,受人雇佣。一天,邻居家小姑娘马蒂尔达(纳塔丽·波特曼饰)敲开他的房门,要求在他那里暂避杀身之祸。原来邻居家的主人是警方缉毒组的眼线,只因贪污了一小包毒品而遭恶警(加里·奥德曼饰)杀害全家的惩罚。马蒂尔达得到里昂的留救,幸免于难,并留在里昂那里。里昂教小女孩使枪,她教里昂法文,两人关系日趋亲密,相处融洽。
							  女孩想着去报仇,反倒被抓,里昂及时赶到,将女孩救回。混杂着哀怨情仇的正邪之战渐次升级,更大的冲突在所难免……
						</textarea>
					</td>
					<td>
						<a href="#" class="edit-btn" onclick="editRow(this)">编辑</a>
						<a href="#" onclick="deleteRow(this)">删除</a>
					</td>
				</tr>
				<tr>
					<td><img class="poster" src="3.png" alt="美丽人生" /></td>
					<td>美丽人生</td>
					<td>剧情/喜剧/爱情/战争</td>
					<td>
						罗伯托·贝尼尼 / 尼可莱塔·布拉斯基 / 乔治·坎塔里尼 / 朱斯蒂诺·杜拉诺 / 赛尔乔·比尼·布斯特里克 / 玛丽萨·帕雷德斯 / 霍斯特·布赫霍尔茨 / 利迪娅·阿方西 /

					</td>
					<td>
						<textarea name="description" cols="25" rows="15">
							  犹太青年圭多(罗伯托·贝尼尼)邂逅美丽的女教师多拉(尼可莱塔·布拉斯基),他彬彬有礼的向多拉鞠躬:“早安!公主!”。历经诸多令人啼笑皆非的周折后,天遂人愿,两人幸福美满的生活在一起。
							  然而好景不长,法西斯政权下,圭多和儿子被强行送往犹太人集中营。多拉虽没有犹太血统,毅然同行,与丈夫儿子分开关押在一个集中营里。聪明乐天的圭多哄骗儿子这只是一场游戏,奖品就是一辆大坦克,儿子快乐、天真的生活在纳粹的阴霾之中。尽管集中营的生活艰苦寂寞,圭多仍然带给他人很多快乐,他还趁机在纳粹的广播里问候妻子:“早安!公主!”
							  法西斯政权即将倾覆,纳粹的集中营很快就要接受最后的清理,圭多编给儿子的游戏该怎么结束?他们一家能否平安的度过这黑暗的年代呢?
						</textarea>
					</td>
					<td>
						<a href="#" class="edit-btn" onclick="editRow(this)">编辑</a>
						<a href="#" onclick="deleteRow(this)">删除</a>
					</td>
				</tr>
			</table>
		</div>
		<div class="editlist">
			<h1>记录编辑表单(缩小页面更方便)</h1>
			<div class="form">
				海报:<select name="poster">
					<option value="1.png" style="width: 100px;">星际穿越</option>
					<option value="2.png" style="width: 100px;">这个杀手不太冷</option>
					<option value="3.png" style="width: 100px;">美丽人生</option>
					<option value="4.png" style="width: 100px;">绿皮书</option>
					<option value="5.png" style="width: 100px;">让子弹飞</option>
					<option value="6.png" style="width: 100px;">重庆谈判</option>
					<option value="7.png" style="width: 100px;">海棠依旧</option>
					<option value="8.png" style="width: 100px;">古田军号</option>
				</select> <br />
				影视名称:<input type="text" name="filmname"> <br />
				影视类型:<input type="text" name="category"> <br />
				影视主演:<input type="text" name="actors"> <br />
				简介:<textarea name="description111" cols="40" rows="20"></textarea> <br />
				<button id="alter" onclick="saveChanges()">保存</button>
				<button id="add">添加</button>
				<button id="clearforM" onclick="clearForm()">清空</button>
			</div>
		</div>
		<script>
			//添加记录
			document.getElementById("add").addEventListener("click", function() {
				var poster = document.getElementsByName("poster")[0].value;
				var filmname = document.getElementsByName("filmname")[0].value;
				var category = document.getElementsByName("category")[0].value;
				var actors = document.getElementsByName("actors")[0].value;
				var description = document.getElementsByName("description111")[0].value;

				if (!poster || !filmname.trim() || !category.trim() || !actors.trim() || !description.trim()) {
					alert("请填写完整内容!");
					return;
				}

				var table = document.getElementById("myTable");
				var newRow = table.insertRow(-1);

				var cell1 = newRow.insertCell(0);
				var cell2 = newRow.insertCell(1);
				var cell3 = newRow.insertCell(2);
				var cell4 = newRow.insertCell(3);
				var cell5 = newRow.insertCell(4);
				var cell6 = newRow.insertCell(5);

				cell1.innerHTML = '<img class="poster" src="' + poster + '" alt="' + filmname + '" />';
				cell2.textContent = filmname;
				cell3.textContent = category;
				cell4.textContent = actors;
				cell5.innerHTML = '<textarea name="description" cols="25" rows="15">' + description + '</textarea>';
				cell6.innerHTML =
					'<a href="#" class="edit-btn" onclick="editRow(this)">编辑</a> <a href="#" onclick="deleteRow(this)">删除</a>';
				alert("成功添加记录!");
			});
		</script>
	</body>
</html>

style.css文件

* {
	margin: 0;
	padding: 0;
	/* 清除用户代理样式 */
}

.recordlist {
	float: left;
	/* 浮动,缩小页面能够方便操作 */
	margin: 20px;
	font-size: 20px;
}

.editlist {
	margin: 20px;
	float: left;
	/* 浮动,缩小页面能够方便操作 */
}

h1 {
	text-align: center;
	margin-top: 10px;
	margin-bottom: 20px;
}

table {
	margin: 0 auto;
	font-family: Arial, Helvetica, sans-serif;
	border-collapse: collapse;
}

td,
th {
	width: 200px;
	text-align: center;
	border: 1px lightpink solid;
	z'z' z'z' z'z' z'z
 padding: 10px;
}

img {
	width: 180px;
	margin: 0 auto;
	display: block;
}

.form {
	text-align: center;
	margin-bottom: 30px;
	font-size: 30px;
}

.form select {
	font-size: 30px;
	margin-bottom: 30px;
}

.form input {
	margin-right: 10px;
	margin-bottom: 30px;
	font-size: 30px;
}

.form button {
	margin-top: 30px;
	font-size: 30px;
}

script.js文件

function deleteRow(btnDelete) {
	const confirmDelete = confirm("你确定要删除这条记录?");
	if (confirmDelete) {
		//获得被单击按钮所在行的索引
		var currentIndex = btnDelete.parentNode.parentNode.rowIndex;
		var myTable = document.getElementById("myTable");
		myTable.deleteRow(currentIndex);
	}
}

function editRow(editButton) {

	var row = editButton.parentNode.parentNode;
	var tableCells = row.getElementsByTagName("td");


	document.getElementsByName("poster")[0].value = tableCells[0].getElementsByTagName("img")[0].src.match(
		/(\d\.png)$/)[0];
	document.getElementsByName("filmname")[0].value = tableCells[1].textContent;
	document.getElementsByName("category")[0].value = tableCells[2].textContent;
	document.getElementsByName("actors")[0].value = tableCells[3].textContent;
	document.getElementsByName("description111")[0].value = tableCells[4].getElementsByTagName("textarea")[0].value;

	document.getElementById("alter").setAttribute("data-current-index", row.rowIndex);
}

function saveChanges() {

	var poster = document.getElementsByName("poster")[0].value;
	var filmname = document.getElementsByName("filmname")[0].value;
	var category = document.getElementsByName("category")[0].value;
	var actors = document.getElementsByName("actors")[0].value;
	var description = document.getElementsByName("description111")[0].value;

	if (!poster || !filmname.trim() || !category.trim() || !actors.trim() || !description.trim()) {
		alert("请填写完整内容!");
		return;
	}

	var index = document.getElementById("alter").getAttribute("data-current-index");
	if (index) {
		var myTable = document.getElementById("myTable");
		var row = myTable.rows[index];

		row.cells[0].getElementsByTagName("img")[0].src = poster;
		row.cells[1].textContent = filmname;
		row.cells[2].textContent = category;
		row.cells[3].textContent = actors;
		row.cells[4].getElementsByTagName("textarea")[0].value = description;
	}

	document.getElementById("alter").removeAttribute("data-current-index");
	alert("确定要更新记录吗?");
}

function clearForm() {
	var formElements = document.querySelectorAll('.form input[type="text"], .form textarea, .form select');

	formElements.forEach(function(element) {
		element.value = '';
	});
}

图片文件

1.png

2.png

3.png

4.png

5.png

6.png

7.png

8.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1717297.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ODBC访问达梦数据库Ubuntu18.04 x86-x64(亲测有效)

ODBC访问达梦数据库Ubuntu18.04 x86-x64 第1步&#xff1a;安装unixodbc驱动,使用下面命令。第2步&#xff1a;拷贝已经安装好的达梦数据库驱动程序第3步&#xff1a;配置ODBC必要的参数文件&#xff0c;如下图第4步&#xff1a;设置环境变量第5步&#xff1a;连接测试 说明&am…

Linux实验六:进程间通信(二)

目录 一、实验目的二、实验内容三、实验环境四、参考代码五、实验步骤步骤1. 编辑源代码test6.c步骤2. 编译源代码test6.c步骤3. 运行可执行程序test6步骤4. 进一步调试源代码test6.c 六、实验结果七、实验总结 一、实验目的 1、理解 POSIX 和 System V 提供的 IPC 相关概念&a…

Unity 自定义房间布局系统 设计与实现一个灵活的房间放置系统 ——自定义房间区域功能

自定义房间区域功能 效果&#xff1a; 功能&#xff1a; 能够自定义房间的大小一键生成放置区域可控的放置网格点当物体放置到区域内可自动吸附物体是否可放置&#xff0c;放置时如果与其他物体交叉则不可放置&#xff08;纯算法计算&#xff09;管理房间内的物体&#xff0c…

【实战JVM】-实战篇-05-内存泄漏及分析

【实战JVM】-实战篇-05-内存泄漏及分析 1 内存溢出和内存泄漏1.1 常见场景1.2 解决内存溢出的方法1.2.1 发现问题1.2.1.1 top1.2.1.2 ViusalVM1.2.1.3 arthas1.2.1.4 PrometheusGrafana 1.2.2 堆内存状况对比1.2.3 内存泄漏原因-代码中1.2.3.1 equals()-hashCode()1.2.3.2 内部…

相机等效焦距

1. 背景 物理焦距我们很熟悉,但是在接触实际的相机参数时,相机厂家会提到一个参数等效焦距,甚至有时候不提供物理焦距,这时候如果我们得到真实的物理焦距需要进行一定的转换.在介绍两者之间的转换关系前,先介绍一下等效焦距的由来. 如上图,假设在某一个镜头,其成像面会出现图…

Linux配置java,maven,marshalsec环境

文章目录 一. Linux配置java环境1.下载jdk文件2.解压tar.gz文件3.设置java环境变量4.验证是否成功 二. Linux配置maven环境1.下载压缩包2.解压tar.gz3. 配置环境变量 三. Linux配置marshalsec环境 一. Linux配置java环境 1.下载jdk文件 mkdir /opt/javawget https://repo.hua…

【设计模式深度剖析】【5】【结构型】【桥接模式】| 以电视和遥控器为例加深理解

&#x1f448;️上一篇:组合模式 | 下一篇:外观模式&#x1f449;️ 设计模式-专栏&#x1f448;️ 目 录 桥接模式(Bridge Pattern)定义英文原话是&#xff1a;直译理解 4个角色UML类图代码示例 应用优点缺点使用场景 示例解析&#xff1a;电视和遥控器UML类图 桥接模式…

【漏洞复现】DT-高清车牌识别摄像机 任意文件读取漏洞

0x01 产品简介 DT-高清 车牌识别摄像机是一款先进的安防设备&#xff0c;采用高清图像传感器和先进的识别算法&#xff0c;能够精准、快速地识别车牌信息。其高清晰该摄像机结合了智能识别技术&#xff0c;支持实时监宴图像质量确保在各种光照和天气条件下都能准确捕捉车牌信息…

【设计模式】JAVA Design Patterns——Factory Method(虚拟构造器模式)

&#x1f50d;目的 为创建一个对象定义一个接口&#xff0c;但是让子类决定实例化哪个类。工厂方法允许类将实例化延迟到子类 &#x1f50d;解释 真实世界例子 铁匠生产武器。精灵需要精灵武器&#xff0c;而兽人需要兽人武器。根据客户来召唤正确类型的铁匠。 通俗描述 它为类…

视频汇聚管理平台EasyCVR程序报错“create jwtSecret del server class:0xf98b6040”的原因排查与解决

国标GB28181协议EasyCVR安防视频监控平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力&#xff0c;平台支持7*24小时实时高清视频监控&#xff0c;能同时播放多路监控视频流…

【学习笔记】Windows GDI绘图(八)画笔Pen与画刷Brush

文章目录 关于Pen改变Pen的宽度width和对齐方式Alignment带线帽的线段连接线条LineJoin自定义虚线用纹理填充线条 关于BrushHatchBrush阴影LinearGradientBrush线性渐变PathGradientBrush 详细示例Pen与Brush的属性与方法 关于Pen 改变Pen的宽度width和对齐方式Alignment 可以…

IntelliJ IDEA Ultimate 2024.1 Mac激活码 Java开发首选IDE

IntelliJ IDEA Ultimate 2024 搜Mac软件之家下载IDEA Mac中文版 IntelliJ IDEA Ultimate 2024是JetBrains公司推出的一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;专为专业开发者设计&#xff0c;支持多种编程语言和框架。它提供了一系列高级功能&…

【免费Web系列】JavaWeb实战项目案例五

这是Web第一天的课程大家可以传送过去学习 http://t.csdnimg.cn/K547r 新增员工 前面我们已经实现了员工信息的条件分页查询。 那今天我们要实现的是新增员工的功能实现&#xff0c;页面原型如下&#xff1a; ​ 首先我们先完成"新增员工"的功能开发&#xff0…

Linux--线程的分离、线程库的地址关系的理解、线程的简单封装(二)

线程系列&#xff1a; 线程的认识&#xff1a;讲解线程的概念和线程的基本控制 线程的分离 线程分离是指将一个线程从主线程中分离出来&#xff0c;使其能够独立运行。当一个线程被设置为分离状态时&#xff0c;它结束时系统会自动回收其资源&#xff0c;而不需要其他线程使用…

【喜报】科大睿智服务企业通过CMMI3级认证

​北京建投科信科技发展股份有限公司&#xff08;以下简称“北京建投科技” &#xff09;前身为北京银帝科技发展公司&#xff0c;成立于1993年&#xff0c;注册资本6,000万元&#xff0c;为中国建银投资有限责任公司&#xff08;简称“中国建投”&#xff09;的成员企业建投华…

ovs-vsctl错误:Port does not contain a column whoes name matches “--id“

出错的命令是: ovs-vsctl -- set Bridge br-int mirrors=@m -- --id=@snooper0 get Port snooper0\ -- --id=@patch-tun get Port patch-tun -- --id=@m create Mirror name=mymirror \ select

微软Edge浏览器深度解析:功能、同步、隐私与安全

微软Edge浏览器是微软公司开发的一款网页浏览器,它基于Chromium内核,提供了快速、安全和兼容性良好的网页浏览体验。以下是关于微软Edge浏览器的详细信息和使用指南: 微软Edge浏览器的主要特点: 1. 基于Chromium内核: 渲染引擎:Chromium内核是基于开源项目Blink的,它…

LNMP分布式搭建

一、准备三台主机 192.168.100.11 mysql 192.168.100.12 nginx 192.168.100.13 php 二、关闭防火墙及安全策略 systemctl stop firewalld setenforce 0 三、安装nginx&#xff08;192.168.100.11&#xff09; 1、添加nginx源 vim /etc/yum.repos.d/ng…

数据整理的Compact流程 (二)|OceanBase数据转储合并技术解读(二)

上篇文章《数据整理的Compact流程 &#xff08;一&#xff09;&#xff5c;OceanBase数据转储合并技术解读&#xff08;二&#xff09;》中&#xff0c;有讲解到&#xff0c;在OceanBase数据库中&#xff0c;当MemTable写满时&#xff0c;将其下刷到Mini SSTable的过程包含两个…

正邦科技(day4)

烧录 一、烧录固件二、 通讯模块升级1&#xff1a;USB的方式升级固件2&#xff1a;通过mqtt的方式升级固件3&#xff1a;切换环境 三、 烧录WiFi1&#xff1a;短接2&#xff1a;烧录脚本 设备注意事项&#xff1a; 第一种方式&#xff1a;通信模组和MCU都可以统一烧录BoodLoade…