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

题目

【实验主题】

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

【实验任务】

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'zpadding: 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.mzph.cn/web/19319.shtml

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

相关文章

正则匹配优化:匹配排除多个字符串的其他字符串

(^entity|^with|...)\w优化 (?!entity|with|has|index|associations|input)\w(?!): 匹配排除项 效果 继续优化 匹配会过滤掉带有关键字的字段&#xff0c;在过滤的时候是可以加上尾部结束匹配符的 效果&#xff1a;

thinkphp6 自定义的查询构造器类

前景需求&#xff1a;在查询的 时候我们经常会有一些通用的&#xff0c;查询条件&#xff0c;但是又不想每次都填写一遍条件&#xff0c;这个时候就需要重写查询类&#xff08;Query&#xff09; 我目前使用的thinkphp版本是6.1 首先自定义CustomQuery类继承于Query <?p…

【C语言回顾】预处理

前言1. 简单概要2. 预处理命令讲解结语 上期回顾: 【C语言回顾】编译和链接 个人主页&#xff1a;C_GUIQU 归属专栏&#xff1a;【C语言学习】 前言 各位小伙伴大家好&#xff01;上期小编给大家讲解了C语言中的编译和链接&#xff0c;接下来我们讲解一下预处理&#xff01; …

【香橙派 AIpro】新手保姆级开箱教程:Linux镜像+vscode远程连接

香橙派 AIpro 开发板 AI 应用部署测评 写在最前面一、开发板概述官方资料试用印象适用场景 二、详细开发前准备步骤1. 环境准备2. 环境搭建3. vscode安装ssh插件4. 香橙派 AIpro 添加连接配置5. 连接香橙派 AIpro6. SSH配置 二、详细开发步骤1. 登录 juypter lab2. 样例运行3. …

MySQL主从搭建--保姆级教学

MYSQL主从搭建步骤 主节点 # 进入目录 cd /opt# 下载安装包 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz# 解压 tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz# 拷贝到/usr/local mv /opt/mysql-8.0.20-linux-g…

【IDEA】-使用IDEA查看类之间的依赖关系

1、父子类的继承、实现关系 1.1、使用CTRL Alt U 选择 java class 依据光标实际指向的类位置 用实心箭头表示泛化关系 是一种继承的关系&#xff0c;指向父类 可以提前设置需要显示的类的属性、方法等信息 快捷键 Ctrl Alt S &#xff0c;然后搜索 Diagrams 1.2、使用…

python知识继续学习

1、计算机表示小数是有误差的&#xff0c;下面的5就是误差 2、在python中&#xff0c;所有的非0数字都是True&#xff0c;零是False。所有的非空字符串都是True&#xff0c;空字符串是False。空列表是False。在python的基本数据类型中&#xff0c;表示空的东西都是False&#x…

数据结构(三)循环链表 约瑟夫环

文章目录 一、循环链表&#xff08;一&#xff09;概念&#xff08;二&#xff09;示意图&#xff08;三&#xff09;操作1. 创建循环链表&#xff08;1&#xff09;函数声明&#xff08;2&#xff09;注意点&#xff08;3&#xff09;代码实现 2. 插入&#xff08;头插&#x…

【linux】运维-基础知识-认知hahoop周边

1. HDFS HDFS&#xff08;Hadoop Distributed File System&#xff09;–Hadoop分布式文件存储系统 源自于Google的GFS论文&#xff0c;HDFS是GFS的克隆版 HDFS是Hadoop中数据存储和管理的基础 他是一个高容错的系统&#xff0c;能够自动解决硬件故障&#xff0c;eg&#xff1a…

【Linux 网络编程】网络的背景、协议的分层知识!

文章目录 1. 计算机网络背景2. 认识 "协议"3. 协议分层 1. 计算机网络背景 网络互联: 多台计算机连接在一起, 完成数据共享; &#x1f34e;局域网&#xff08;LAN----Local Area Network&#xff09;: 计算机数量更多了, 通过交换机和路由器连接。 &#x1f34e; 广…

多模态模型入门:BLIP与OWL-ViT

BLIP 数据预处理 CapFilt&#xff1a;标题和过滤 由于多模态模型需要大量数据集&#xff0c;因此通常必须使用图像和替代文本 (alt-text) 对从互联网上抓取这些数据集。然而&#xff0c;替代文本通常不能准确描述图像的视觉内容&#xff0c;使其成为噪声信号&#xff0c;对于…

MAC M1 —— Install

文章目录 MAC M1 —— Install安装IDEA安装JDK安装Maven安装brew无法创建文件 /data/serverMac 修改终端用户名&#xff08;主机名&#xff09;PyCharm MAC M1 —— Install 安装IDEA 关键词&#xff1a;2020到2021.3的激活步骤。找下Download文件夹 安装JDK 在个人的电脑上…

思维+滑动窗口,LeetCode 2831. 找出最长等值子数组

目录 一、题目 1、题目描述 2、接口描述 python3 cpp JS 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 python3 cpp JS 一、题目 1、题目描述 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 如果子数组中所有元素都相等&#xff0c;则认…

TypeScript 学习笔记(十一):TypeScript 与微服务架构的结合应用

TypeScript 学习笔记(十一):TypeScript 与微服务架构的结合应用 1. 引言 在前几篇学习笔记中,我们探讨了 TypeScript 的基础知识、前后端框架的结合应用、测试与调试技巧、数据库以及 GraphQL 的结合应用。本篇将重点介绍 TypeScript 与微服务架构的结合应用,包括如何使…

mysql数据库管理-mysqlbinlog备份与恢复,主备复制分析

由于服务器生成的二进制日志文件以二进制格式保存&#xff0c;所以如果想要检查这些文件的文本格式&#xff0c; 就会用到mysqlbinlog日志管理工具。 mysqlbinlog的具体用法如下&#xff1a; shell> mysqlbinlog [options] log-files1 log-files2. . option有很多选项&…

《探索Stable Diffusion:AI绘画的创意之路与实战秘籍》

《Stable Diffusion AI 绘画从提示词到模型出图》介绍了 Stable Diffusion AI 绘画工具及其使用技巧。书中内容分为两部分&#xff1a;“基础操作篇”&#xff0c;讲解了 SD 文生图、图生图、提示词、模型、ControlNet 插件等核心技术的应用&#xff0c;帮助读者快速从新手成长…

mysql仿照find_in_set写了一个replace_in_set函数,英文逗号拼接字符串指定替换

开发中使用mysql5.7版本数据库&#xff0c;对于英文逗号拼接的字符串&#xff0c;想要替换其中指定的字符串&#xff0c;找不到数据库函数支持&#xff0c;自己写了一个&#xff0c;实测好用&#xff01; /*类似find_in_set,按英文逗号拆分字段,找出指定的旧字符串,替换成新字…

Python库之retrying的高级用法深度解析

Python库之retrying的高级用法深度解析 概述 retrying 是一个Python库&#xff0c;它通过装饰器的方式简化了代码中重试机制的实现。本文将深入探讨retrying库的高级用法&#xff0c;帮助开发者更有效地利用它来增强程序的稳定性和健壮性。 安装 首先&#xff0c;确保你已经…

java中,怎样用最简单方法实现写word文档

在跨平台环境中实现写word时&#xff0c;如果用现成的库&#xff0c;就会涉及跨平台兼容性问题&#xff0c;比如在安卓与java中实现写word的功能。还有一个问题就是&#xff0c;完全用程序生成word文档&#xff0c;工作量较大。所以采用了模板替换的方法。 docx文档本质就是一…

深度学习之学习率调度器Scheduler介绍

调度器是深度学习训练过程中非常重要的一部分,它用于动态调整模型的学习率,从而提高训练效率和最终性能。 1. 为什么需要学习率调度器? 深度学习训练中,学习率是一个非常关键的超参数。合适的学习率可以确保模型快速收敛并获得良好的性能。 但是在训练过程中,最优的学习率会随…