网页——JSON、简单网页版计算器

这篇博客探讨了网页中的对象概念,包括节点层级、自定义函数和二级联动。接着,介绍了JSON作为数据交换格式的特点,强调其简洁性和独立于编程语言的特性。文章还涉及JSON的嵌套结构、解析过程以及与字符的转换。最后,讲解了如何创建一个简单的网页版计算器。

一、对象
(一)节点:节点的层级关系,父子关系,兄弟关系
节点的类型: 标签节点,注释节点,文本节点

<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			window.onload = function() {
								var nodes = document.all;
				 				for (var i = 0; i < nodes.length; i++) {
				 					alert(nodes[i].nodeName + "===" + nodes[i].nodeType);
				 				}
				 var chs = document.body.lastElementChild.childNodes;
				 for (var i = 0; i <chs.length; i++) {
				 	alert(chs[i].nodeName + "===" + chs[i].nodeType);
				 }
				var chs = document.body.firstElementChild.nextElementSibling.childNodes;
				for (var i = 0; i <chs.length; i++) {
					//alert(chs[i].nodeName + "===" + chs[i].nodeType);
					if(chs[i].nodeType==1){
							chs[i].style.color="red";
					}
				}
			}
		</script>
	</head>
	<body>
		<!-- 注释 -->
		<div>
			<h1>aabc</h1>
		</div>
		<div>
			<h1>aabcsfsdfsdfsdf</h1>
			<h1>aabcsfsdfsdfsdf</h1>
		</div>
	</body>
</html>

(二)自定义函数

<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			/*
			//构造函数
			function Student(name,age){
				//alert("构造函数调用了");
				//alert(this);
				this.name=name;
				this.age=age;
				this.eat=function(){
					alert("吃饭");
				}
			}; 
			
			var stu=new Student("张三",23);
			alert(stu.name);
			alert(stu.age);
			stu.eat();
			
			var stu2=new Student("李四",24);
			alert(stu2.name);
			alert(stu2.age);
			stu2.eat();
			*/
		    var obj=new Object();
			obj.name="战三";
			obj.age=23;
			obj.eat=function(){
				alert("吃法");
			}
			alert(obj.name)
			alert(obj.age);
			obj.eat();
		</script>
	</head>
	<body>
	</body>
</html>

(三)二级联动

<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		
	</head>
	<body>
		<select id="sf" onchange="selecSF()">
			<option value ="">--省份--</option>
			<option value ="">陕西</option>
			<option value ="">河南</option>
		</select>
		<select id="citys">
			<option value ="">--请选择城市--</option>
		</select>
	</body>
	
	<script type="text/javascript">
		/*
		当我选择了省份后,后面的下拉框的内容要变成这个省份对应的城市
		*/
		//省市二级联动
		//获取省份这个标签对象
		var arr=[[],["请选择城市","西安","商洛","宝鸡","咸阳","铜川","渭南","汉中","安康","榆林","延安"],["请选择城市","商丘","郑州","驻马店","南阳","洛阳","开封"]];
		var sheng=document.getElementById("sf");
		var city=document.getElementById("citys");
		
		function selecSF(){
			//清空旧数据
			city.innerHTML="";
			//alert("选择而来");
			var index=sheng.selectedIndex;
			//alert(index);
			var citys=arr[index];
			for(var i=0;i<citys.length;i++){
				//取出这个省份对应的一维数组里面的城市,显示到第二个下来框
				//创建option对象
				var op=document.createElement("option");
				//创建文本对象
				var text=document.createTextNode(citys[i]);
				//把文本对象放到option之间
				op.appendChild(text);
				//把option放到select之间
				city.appendChild(op);
			}
		}
	</script>
</html>

二、JSON
(一)嵌套对象

<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			var json = {
				name: '张三',
				age: '23',
				data: {
					sonname: 'sonson',
					sonage: 100,
				},
				arr:[10,30,40],
				method:function(){
					alert("abc");
				},
				//ES6的语法
				test(){
					alert("test");
				},
				// test:function(){ 上面不简写
				// 	 
				// }
			};
			//取sonson
			 var name=json.data.sonname;
			 alert(name);
			 var v=json.arr
			 var num=v[2];
			 alert(num);
			 json.method();
			 json.test();
			//还有一种封装形式 数组的元素放的是JSON对象
			var jsonArr=[{'name':'张三',age:23},{'name':'李四',age:24},{'name':'王五',age:25}];
			var v=jsonArr[0].name;
			alert(v);
			for(index in jsonArr){
				var obj=jsonArr[index];
				for(key in obj){
					alert(key+"==="+obj[key]);
				}
			}
		</script>
	</head>
	<body>
	</body>
</html>

(二)对象
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。
// 它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,
// 采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得
// JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			//如何定义JSON对象{'键名':值,键名2':值2};
			var stuJSON={'name':'张三','age':23,'sex':true};
			 //取数据:方式1:键找值
			 var name=stuJSON.name;
			 alert(name);
			 alert(stuJSON.age);
			 alert(stuJSON.sex);
			 //方式2:
			var name2=stuJSON['name'];
			alert(name2)
			alert("下面的")
			//如何遍历JSON对象
			for(key in stuJSON){
				alert(stuJSON[key]);
			}
				alert("下面的数组")
			//遍历数组 for in 
			var arr=["aaa","bbbb","cccc","dddd"];
			for(index in arr){
				alert(arr[index]);
			}
			// String stu="{'name':'张三','age':23,'sex':true}"
			
		</script>
	</head>
	<body>
	</body>
</html>

(三)解析

<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<table border="1" cellspacing="0" cellpadding="0" width="300px" height="200px">
			<tr>
				<td id="td1">Data</td>
				<td>Data</td>
				<td>Data</td>
				<td>Data</td>
				<td>Data</td>
				<td>Data</td>
			</tr>
		</table>
		<script type="text/javascript">
			
			// https://www.apiopen.top/weatherApi?city=%E6%88%90%E9%83%BD  天气预报的接口
			// var str='{"name":"runoob", "alexa":10000, "site":"www.runoob.com"}'
			// var str = '{"name":"runoob", "alexa":10000, "site":"www.runoob.com","dataJSON":{"num":100},"myJSON":{"hehe":"haha"}}'
			// var obj = JSON.parse(str); //把JSON字符串解析成JSON对象
			// alert(obj.myJSON.hehe);

			// var jsonStr =
			// 	'{"code":200,"message":"成功!","result":"因有人恶意刷接口,导致接口调用频繁,接口已经不能稳定运行,所以计划近期下线,积德吧朋友,如果长期如此,所有接口将面临关闭"}';
			// 	
			//JSON语法的严谨格式,不要格式化,紧凑风格,键值对不要有换行空格
			var jsonStr =
				'{"code":200,"msg":"成功!","data":{"yesterday":{"date":"18日星期二","high":"高温 27℃","fx":"无持续风向","low":"低温 20℃","fl":"\u003c![CDATA[\u003c3级]]\u003e","type":"阴"},"city":"成都","aqi":null,"forecast":[{"date":"19日星期三","high":"高温 27℃","fengli":"\u003c![CDATA[\u003c3级]]\u003e","low":"低温 20℃","fengxiang":"无持续风向","type":"多云"},{"date":"20日星期四","high":"高温 30℃","fengli":"\u003c![CDATA[\u003c3级]]\u003e","low":"低温 22℃","fengxiang":"无持续风向","type":"多云"},{"date":"21日星期五","high":"高温 29℃","fengli":"\u003c![CDATA[\u003c3级]]\u003e","low":"低温 21℃","fengxiang":"无持续风向","type":"阵雨"},{"date":"22日星期六","high":"高温 26℃","fengli":"\u003c![CDATA[\u003c3级]]\u003e","low":"低温 19℃","fengxiang":"无持续风向","type":"小雨"},{"date":"23日星期天","high":"高温 23℃","fengli":"\u003c![CDATA[\u003c3级]]\u003e","low":"低温 19℃","fengxiang":"无持续风向","type":"小雨"}],"ganmao":"各项气象条件适宜,无明显降温过程,发生感冒机率较低。","wendu":"26"}}'
			var obj = JSON.parse(jsonStr); //JSON.parse()这个方法,在解析JSON字符串时,注意JSON字符串要原始格式(JSON字符串没有换行和空格)
			//alert(obj);
			var sonJSON=obj.data.yesterday;
		     //sonJSON.date
			// document.getElementById("td1").innerText=sonJSON.date;
			var tds=document.getElementsByTagName("td");
			var keyarr=new Array();
			for(key in sonJSON){
				keyarr.push(key);
			}
			//alert(keyarr);
			// for(var i=0;i<tds.length;i++){
			// 	tds[i].innerText=sonJSON.keyarr[i];
			// }
			
			for(index in tds){
				//alert(index);
				tds[index].innerText=sonJSON[keyarr[index]];
			}
		</script>
	</body>
</html>

(四)JSON对象和字符互换

<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			// { "name":"runoob", "alexa":10000, "site":"www.runoob.com" }
			// 
			// 我们使用 JSON.parse() 方法处理以上数据,将其转换为 JavaScript 对象:
			//外面是单引号 注意:单引号括JSON对象,就变成JSON字符串
			var str='{"name":"runoob", "alexa":10000, "site":"www.runoob.com"}'
			var obj = JSON.parse(str); //把JSON字符串解析成JSON对象
			alert(obj.name);
			
			var loginJSON={"username":"zhangsan","password":"123456"};
			
			var jsonString=JSON.stringify(loginJSON); //把JSON对象变成JSON字符串
			alert(jsonString);
			alert(typeof jsonString);
		</script>
	</head>
	<body>
	</body>
</html>

三、简单网页版计算器

<html>
	<head>
		<meta charset="utf-8">
		<title>计算器</title>
		<style type="text/css">
			input {
				width: 336px;
				height: 90px;
				font-size: 50px;
			}

			input:disabled {
				background: greenyellow;
			}

			td {
				text-align: center;
				font-size: 30px;
				width: 100px;
			}

			td:hover {
				background: yellowgreen;
				cursor: pointer;
			}
			#div1{
				border="0";
				 cellspacing="0" ;
				 cellpadding="0px" ;
				 align="center" ;
				 background-image:url(img/c2.jpg);
			}
			#div2{
				margin-left:800px; 
				width:350px;
				height:100%;
			}
			#topTime{
				height:60px;
				 width:350px;
				 background-color: greenyellow;
			}
		</style>
	</head>

	<body>
		<div id="div1" >
			
				<div id="div2" >
					            <div id="topTime" onselectstart="return false" style=";" >
					            	
					            </div>
								<div id="" style="border: 5px #FBF9FA solid;cellpadding=0px;">
									<input type="text" name="" id="show" value="0" disabled="disabled" />
								</div>
								
								<table border="1" cellpadding="0" height="450px" width="350px">
									<tr>
										<td id="clear">AC</td>
										<td id="del">退格</td>
										<td>%</td>
										<td class="czf">÷</td>
									</tr>
									<tr>
										<td class="num">7</td>
										<td class="num">8</td>
										<td class="num">9</td>
										<td class="czf">×</td>
									</tr>
									<tr>
										<td class="num">4</td>
										<td class="num">5</td>
										<td class="num">6</td>
										<td class="czf">-</td>
									</tr>
									<tr>
										<td class="num">1</td>
										<td class="num">2</td>
										<td class="num">3</td>
										<td class="czf">+</td>
									</tr>
									<tr>
										<td colspan="2" class="num">0</td>
										<td class="num" id="point">.</td>
										<td id="result">=</td>
					
									</tr>
								</table>
				</div>
			
		</div>
		
	</body>
	<script type="text/javascript">
		/* 思路:1.布局页面
		 2.页面按键分为三类 数字和小数点归为一类,操作符归为一类, 退格 等号 清除 显示框 单独的 
		 3.通过id 或者class 先获取出这些dom元素
		 4.把我们点的数字显示上去,我们需要给所有数字设置点击事件
		 */
		//找到顶部时间栏
var timeTop = document.getElementById("topTime");
		showTime();
var cycleTime = setInterval(showTime, 500);

function showTime() {
	var date=new Date();
	var time=date.toLocaleDateString();
	var time=date.toLocaleString(); //2019/6/14 上午10:17:31
	timeTop.innerHTML = time;
}
		
		var show_result = document.getElementById("show"); //获取显示框

		var clear_btn = document.getElementById("clear"); //获取清除键

		var del_btn = document.getElementById("del"); //获取退格键

		var result_btn = document.getElementById("result"); //获取等号

		var nums = document.getElementsByClassName("num"); //获取所有的数字键

		var czfs = document.getElementsByClassName("czf"); //获取所有的操作符键
		//定义三个变量,来存储第一个数字,第二个数字,运算符
		var numValue1 = '';
		var numValue2 = '';
		var ysf = '';

		//给数字置点击
// 		for (var i = 0; i < nums.length; i++) {
// 			nums[i].onclick = function() {
// 				//取出标签之间的数字
// 				numValue1 += this.innerText; //注意this代表的是你点击的那个元素对象
// 				//alert(v);
// 				show_result.value = numValue1;
// 			}
// 		}
		
		
		for (var i = 0; i < nums.length; i++) {
			nums[i].onclick = function() {
				//取出标签之间的数字
					
				if(this.innerText=="."){
								if(numValue1.indexOf('.') ==-1){
									numValue1 += this.innerText; //注意this代表的是你点击的那个元素对象
								}else if(numValue1.indexOf('.') ==2){
									numValue1 += this.innerText; //注意this代表的是你点击的那个元素对象
									numValue1 = numValue1.substring(0, numValue1.length - 1);
								}
				} else{
					if(numValue1.charAt(0)=='.'){
						numValue1='0' + numValue1;
						
					}
					numValue1 += this.innerText; //注意this代表的是你点击的那个元素对象
				}
				show_result.value = numValue1;
			}
		}

		//给操作符设置点击事件
		for (var i = 0; i < czfs.length; i++) {
			czfs[i].onclick = function() {
				if(numValue2==''){
					//当你点击操作符号时:我们把第一个数字,给第二个数字,然后把第一个数字清空,用来接收用户下次的输入
					//保存操作符
					numValue2 = numValue1;
					numValue1 = '';
					ysf = this.innerText;
				}else{
					//处理四则运算
					//把上一次两个数运算的结果算出来,赋值给numValue2 再把numValue1清空,去接收下一次的输入
					
					resultFun();
					ysf = this.innerText;
				}
				
			}
		}
		//给等号设置监听,运算结果
		result_btn.onclick = function() {
			resultFun();
		}

		function resultFun() {
			//把两个字符串数字,转成数字类型
			var one = Number(numValue2);
			var two = Number(numValue1);
			var r = 0;
			switch (ysf) {
				case '+':
					r = one + two;
					break;
				case '-':
					r = one - two;
					break;
				case '×':
					r = one * two;
					break;
				case '÷':
					if (two == 0) {
						clean();
						r = 0;
						alert("除数不能为0");
					} else {
						r = one / two;
					}
					break;
			}
			numValue2=r;
			numValue1='';
			show_result.value =numValue2;
		}
		//实现退格键
		del_btn.onclick = function() {
			tuige();
		}
		function tuige(){
			if (numValue1.length > 1) {
							numValue1 = numValue1.substring(0, numValue1.length - 1);
							show_result.value = numValue1;
						}
			
						//else{
						// 	numValue1='';
						// 	numValue2='';
						// 	ysf='';
						// 	show_result.value ='0';
						// }
		}
		//实现清除键
		var clean = function() {
			numValue1 = '';
			numValue2 = '';
			ysf = '';
			show_result.value = '0';
		}
		clear_btn.onclick = clean;
	</script>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值