弱弱的小白记录之——面向对象实现简单的歌曲管理信息

实现简单的面向对象方法来管理歌曲信息的增删改查。

数据驱动思想,也可以理解单项数据绑定,既:数据发生变化,页面也跟着变化;

思路:

  使用构造函数来存储数据信息;

  使用原型来存储方法(增删改查);

  修改方式中方法使用到的数据,由变量转为对象的属性;

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style type="text/css">
		.container {
			margin: 100px auto;
			width: 850px;
			border: 1px solid #dad8d8;

			/*height: 100%;*/
		}
		.songslist-main, .songslist-header {
			position: relative;
			width: 100%;
			text-align: center;
		}
		.songslist-header {
			height: 30px;
			border-bottom: 1px solid #dad8d8;
			line-height: 30px;
			background-color: #def;
		}

		.songslist-name {
			position: absolute;
			width: 40%;
			height: 100%;
			border-right: 1px solid #dad8d8;
		}
		.songslist-singer {
			position: absolute;
			left: 40%;
			width: 50%;
			height: 100%;
			border-right: 1px solid #dad8d8;
		}
		.songslist-option {
			position: absolute;
			left: 90%;
			width: 10%;
			height: 100%;
		}

		.songslist-main {
			background-color: #fff;
			height: 100%;
		}
		.songslist-main .songslist-name{
			height: 50px;
			line-height: 50px;
			border: 0;
		}
		.songslist-main .songslist-singer{
			height: 50px;
			line-height: 50px;
			border: 0;
		}
		.songslist-single {
			height: 50px;
		}
	</style>
</head>
<body>

	<div class="container">
		<div class="songslist-op">
			<label for="txtAddSName">歌曲名:</label><input type="text" id="txtAddSName" />
			<label for="txtAddSinger">歌手:</label><input type="text" id="txtAddSinger" />
			<button id="btnAdd">添加</button>
			<button id="btnRemove">删除</button>
		</div>

		<div class="songslist-header">
			<div class="songslist-name">歌曲名称</div>
			<div class="songslist-singer">歌手</div>
			<div class="songslist-option">操作</div>
		</div>

		<div class="songslist-main" id="c">
			<div class="songslist-single">
				<div class="songslist-name">歌曲名称</div>
				<div class="songslist-singer">歌手</div>
			</div>

			<div class="songslist-single">
				<div class="songslist-name">歌曲名称</div>
				<div class="songslist-singer">歌手</div>
			</div>

			<div class="songslist-single">
				<div class="songslist-name">歌曲名称</div>
				<div class="songslist-singer">歌手</div>
			</div>

			<div class="songslist-single">
				<div class="songslist-name">歌曲名称</div>
				<div class="songslist-singer">歌手</div>
			</div>
		</div>
	</div>

	<script type="text/javascript">
		var SongsMagList=function(list){
			this.SongsList=list||[];
			this.render();
		}
		SongsMagList.prototype={
			add:function(songInfo){
				this.SongsList.push(songInfo);
				this.render();
			},
			del:function(sName){
				var  SongsList=this.SongsList;
				for(var i=0;i<SongsList.length;i++){
						if (SongsList[i].sName===sName) {
							SongsList.splice(i,1);
							break;
						};
				}
				this.render();
			},
			update:function(sName,newName){
				var  SongsList=this.SongsList;
				for(var i=0;i<SongsList.length;i++){
						if (SongsList[i].sName===sName) {
							SongsList[i].sSinger=newName;
							break;
						};
				}
			this.render();
			},
			select:function(sName){
				var  SongsList=this.SongsList,msg=null;
				for(var i=0;i<SongsList.length;i++){
						if (SongsList[i].sName===sName) {
							msg=SongsList[i].sSinger;
							break;
						};
				}
				this.render();
				console.log(msg||"没有查询到该歌曲的信息");
			}
		}
		// 给原型对象添加一个 render方法  将数据渲染 封装了一个页面渲染的方法
		SongsMagList.prototype.render=function(){
			// 因为操作的都是 songslist中的数据 增删改查 也是使用songslist中的数据
			 var  SongsList=this.SongsList;
			 var  htmlArr=[];
			// 传入参数
			 SongsList.forEach(function(songInfo){
			 	// songInfo 就是每一个歌曲信息对象 形参
			 		htmlArr.push(‘<div class="songslist-single">‘);
			 		htmlArr.push(‘<div class="songslist-name">‘+songInfo.sName+‘</div>‘);
			 		htmlArr.push(‘<div class="songslist-singer">‘+songInfo.sSinger+‘</div>‘);
			 		htmlArr.push(‘</div>‘);
			 });
			 document.querySelector(‘#c‘).innerHTML=htmlArr.join("");
		}
		// var s1 = new SongsMagList([
		// 	{sName: "痴心绝对", sSinger: "李圣杰"},
		// 	{ sName: "南山南",  sSinger: "马頔"}
		// ]);

		// // 测试增删改查
		// s1.add({sName: "最炫民族风", sSinger: "凤凰传奇"});
		// // console.log(s1);
		// s1.render();

		// console.log(s1);
		// s1.select("南山南");
		// console.log(s1);
		// s1.del("南山南");
		// console.log(s1);
		// s1.update("南山南","madi");
		// console.log(s1);
		//
		//
		//
		var s1=new SongsMagList();
		// 添加 新增歌曲事件
		document.querySelector("#btnAdd").onclick=function(){
			var name=document.querySelector("#txtAddSName").value;
			var singet=document.querySelector("#txtAddSinger").value;
			s1.add({sName: name, sSinger: singet})
		}
		//添加 找到歌曲信息 删除对应的问题
		document.querySelector("#btnRemove").onclick=function(){
			var name=document.querySelector("#txtAddSName").value;
			s1.del(name);
		}

	</script>
</body>
</html>
时间: 2024-10-24 08:37:38

弱弱的小白记录之——面向对象实现简单的歌曲管理信息的相关文章

Vijos P1066 弱弱的战壕【多解,线段树,暴力,树状数组】

弱弱的战壕 描述 永恒和mx正在玩一个即时战略游戏,名字嘛~~~~~~恕本人记性不好,忘了-_-b. mx在他的基地附近建立了n个战壕,每个战壕都是一个独立的作战单位,射程可以达到无限(“mx不赢定了?!?”永恒[email protected][email protected]). 但是,战壕有一个弱点,就是只能攻击它的左下方,说白了就是横纵坐标都不大于它的点(mx:“我的战壕为什么这么菜”ToT).这样,永恒就可以从别的地方进攻摧毁战壕,从而消灭mx的部队. 战壕都有一个保护范围,同它的攻击

[FZYZOJ 1003] 弱弱的战壕

P1003 -- 弱弱的战壕 时间限制:1000MS 内存限制:65536KB Description 永恒和lmx正在玩一个即时战略游戏,名字嘛~~~~~~恕本人记性不好,忘了-_-b. mx在他的基地附近建立了n个战壕,每个战壕都是一个独立的作战单位,射程可以达到无限(“lmx不赢定了?!?”永恒[email protected][email protected]). 但是,战壕有一个弱点,就是只能攻击它的左下方,说白了就是横纵坐标都不大于它的点(mx:“我的战壕为什么这么菜”ToT).这样

lua的弱弱引用表

lua有GC,细节无需太关注,知道些基本的就行,能local就一定不要global: 还有在数组里的对象,除非显式=nil,否则很难回收: 不过可以用弱引用表来告诉GC.外部引用为0,就不要管我,请del it. weak table是通过元表实现,元表里的__mode字段包含k或者v:k表示key为弱引用:v表示value为弱引用. 1.首先看一个普通的例子: a = {} key = {} a[key] = 1 key = {} a[key]=2 collectgarbage() for k

java学习笔记-1205班李夏*:弱弱的说一句:尚硅谷,你值得拥有

时间过得真快,一晃眼一个月都过去了.记得前几个月看尚硅谷java视频的情景,还很清晰. 在这一个月中从最开始来北京java培训时的激动到现在的对北京的适应感觉经历了许多许多,再这一个月中我对北京的人文文化有了比较深入的了解,发现原来一个团队,集体可以如此和谐,每个人也都可以如此努力的为梦想,为工作,使我有了莫名的动力. 对于前一个阶段的总结,我主要可以分为以下几个方面: 第①方面:在学习上的总结,由于学校的期末考试我不得已把自己来北京的时间推迟了两周,来了之后发现这里的进度特别快,心想这下死定了

弱弱的战壕

弱弱的战壕(jdoj1347-vijos1199) 题目大意:给你n个战壕的坐标,每个战壕只能保护其左下方的战壕 ( 明白为什么是弱弱的战壕了吧 ) ,最后输出n行,第 i 行表示保护了i-1个战壕的战壕个数. 注释:n<=15000 每一个战壕的坐标 ( x ,y ) ,x , y<=32000 想法:和清点人数一样,我们也可以通过线段树来维护,对应的,我们选择树状数组 ( 连修改都没有,扯什么扯 ) .怎么维护呢?我们思考...思考.......其实,我开始的想法是读入,然后统一处理,结果

丑数[弱弱版]

丑数[弱弱版] Description 对于一给定的素数集合 S = {p1, p2, ..., pK}, 来考虑那些质因数全部属于S 的数的集合. 这个集合包括:p1, p1p2, p1p1, 和 p1p2p3 (还有其它).这是个对于一个输入的S的丑数集 合.注意:我们不认为1 是一个丑数. 你的工作是对于输入的集合S去寻找集合中的第N个丑数.longint(signed 32-bit)对于 程序是足够的. Input 第 1 行: 二个被空隔分开的整数:K 和 N , 1<= K<=10

安装Visual Studio 2013 update 2 更新包记录和新功能简单体验

昨天下载了进4个小时,将visual studio 2013 update 2 更新包和visual studio 2013 完整安装包(包含UPDATE2)的下载完成,今天抽出时间体验一下,昨天在网上看了一下英文翻译的说明,增加了一些支持和改进,我只是针对于我所看到的来操作使用一下,看看有啥变化吧.将ISO文件加载到虚拟光驱,然后开始安装更新包,界面弹出后告诉我需要大概3个多G的硬盘空间,嗨真是大啊.点击安装开始继续安装,我截个图如下 剩下是就是等着安装完成了,整个安装过程还是比较慢的,安装的

记录利用ettercap进行简单的arp欺骗和mitm攻击过程

方法均来自网络,本人只是记录一下自己操作的过程,大神请无视之- 攻击主机平台:kali-linux        被攻击主机:安卓手机192.168.1.107    (在同一局域网内) 1.利用ettercap进行arp欺骗: root权限下打开ettercap:ettercap -C (curses UI)             ettercap -G (GTK+ GUI) curses UI工作界面: GTK+ UI工作界面: 这里以GTK+ UI为例,打开ettercap之后,选择Sn

面向对象之简单工厂模式

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Interface { class InterfaceTest { static void Main(string[] args) { #region 测试Cat,Monkey,Bear类 introduction test; for (int i = 1; i<=3; i++) { switch (i)