前端学习总结

Day42-JS&BOM

1.JavaScript

​ JS类比于JAVA的SE阶段,让我们了解下JS的基础东西,对象,属性,赋值,创建对象,方法等等。用JAVA的思想去整理JS的这些东西,最低要求是能读得懂JS的代码,不熟悉的东西可以在W3C手册上查询。

1.1 js引入

三种引入方式:1.行内写法(不推荐)作用面积太小了
2.内部写法(学习阶段用的多)
3.外部引入,就是将已经写好的js的格式写在外边,直接引入格式。(项目中用的比较多)

		<!-- 行内推荐写法 -->
		<a href="javascript:void(0)" onclick="alert(1)">111</a>

1.2 JS变量及数据类型

JS原始数据类型:Number:数值类型
String:字符串类型
Blooean:布尔类型
null:空值
Undefind:未定义或者未初始化

js变量:JAVA中的变量是从数据类型限制变量值,JS则简单方便,你可以直接给值,JS自己去处理他的数据类型。
所以JS的变量声名很简单,直接Var就完事

		<script type="text/javascript">
			var num = 10;
			console.debug(typeof num);//number
			var str = "10";
			console.debug(typeof str)//string
			
            /*在JS中 0代表不是整0,代表的是无限接近0的小数,所以1/0不会报错*/
            console.debug(1/0);//"Infinity" 代表无穷大
            console.debug(isFinite(1/0));//判断是否有穷,1/0无穷,所以false

            console.debug(123/"123");//"1" JS底层会将String转换为Number再相除
            console.debug(123/"abc");//"NaN" abc无法被转换为Number,相除得到NaN

            /*在if的条件语句中,只有false    0  null  ""  undefind  这几种情况会被判定为false
            只要有值,就是true*/
            if("21212"){
            console.debug("哪来的猴子")
            }

            var str = null;
            console.debug(str);
            console.debug(typeof str);//"object"
            var str1;
            console.debug(str1);//"undefined" str1没有给予值给他定义属性,所以是undefind属性

		</script>

1.3 JS运算符

​ 没什么特殊的,与数学运算符一致,有一点需要注意的

	<!--	 == :只比较值是否一致
			 ===:即比较值又比较数据类型
			 !==:比较值也比较数据类型
		-->
		<script type="text/javascript">
			var a = 10;
			var b = "10";
			console.debug(a == b);//"true"
			console.debug(a === b);//"false"
			console.debug(a !== b);//"true"
		</script>

1.4 JS函数

​ JS的函数 和JAVA类似,但是比JAVA更简单,参数不用设置数据类型,也可以直接给方法添加参数

		function Person(id,name,age){
				this.id = id;
				this.name = name;
				this.age = age;
			}
			var p = new Person(1,"吾爱国",18);
			console.debug(p.name);//"吾爱国"
			
			function sleep(num1,num2){
				console.debug(num1+num2);
			}
			sleep(10,80)
			/*匿名函数*/
			var fun = function(){
				console.debug("有趣")
			}
			fun();

1.5 JS全局函数

编码解码[window顶级对象下面声明的函数]
encodeURI和decodeURI搭配
使用encodeURICommponent和decodeURICommponent

		/*IE浏览器   不允许发送中文参数*/
		var ss = "百度"
		var str = "www.baidu.com?url="+ss;
		/*编码*/
		var u = encodeURI(str)
		console.debug(u)
		/*解码*/
		var i = decodeURI(u)
		console.debug(i)
		/*
		 使用encodeURICommponent和decodeURICommponent
		 * */
		/*编码*/
		str = "www.baidu.com?url=http://www.qq.com";
		var se = encodeURIComponent(str)
		console.debug(se)
		/*解码*/
		
		/*part2 eval*/
		//eval函数的使用:计算JS的字符串,并将其作为脚本执行
		var a = "console.debug('eval函数实例')";
		console.debug(a); //输出:console.debug('eval函数实例')
		eval(a);//字符串就会当做函数使用

1.6 自定义函数

			/**
			 * js面向对象理解:
			 * 		在JAVA中面类作为对象是通过反射找到对象
			 * 		在JS中一个类直接就可以看成一个对象处理
			 */
			function Person(){
				console.debug("伍鑫是个大傻逼")
			}
			var person = new Person();
			console.debug(typeof person);
			Person();
			
			var p = new Person("吾爱国",18);
			console.debug(p);//object{ }
			console.debug(p.name);//undefined 原方法没定义参数,所有找不到name属性
			function eat(){
				console.debug("大口吃");
			}
			function Person(){
			 //	this.drink=eat;//面代表Person属性 属性所赋值的是函数
				this.smok = function(){
					console.debug("嗦烟")
				}
			}
			p = new Person();
			p.smok();//嗦烟
			
			/*part2对象添加属性的方式详解: 简单粗暴,直接给*/
			function Animal(name,age){
				this.name = name;
				this.age = age;
				this.toString = function(){
					console.debug("name"+this.name+"age"+this.age);
				}
			}
			
			var pig = new Animal("猪5",18);
			console.debug(pig);//name: "猪5", age: 18, toString: toString(
			//直接给当前对象强塞sex属性并赋值
			pig.sex = "女";
			console.debug(pig)//name: "猪5", age: 18,sex: "女", toString: toString()
			
			/*part2.2给原型添加属性:Animal的对象父类添加属性*/
			Animal.prototype.song =function(){
				console.debug("山路十八弯")
			}
			pig.song()

1.7 定时任务

		/* 
			setTimeout() 在指定的毫秒数后调用函数或计算表达式。
			clearTimeout() 取消由 setTimeout() 方法设置的 timeout。 
			
			setInterval() 按照指定的周期(以毫秒计)来调用函数或计算表达式。
			clearInterval() 取消由 setInterval() 设置的 timeout。
           */
          	//eval   :  var text1 = document.getElementById('text1');
          	//tout代表了定时任务
          	/*var tout = setTimeout("document.getElementById('text1').value=new Date()",5000)
            clearTimeout(tout)*/
            
            
            
			var res;//时钟任务的标记
			function start(){
				res = setInterval("document.getElementById('text2').value=new Date()",1000)
			}
			function stop(){
				clearInterval(res)
			}
			
			
			function change(){
				var pass = document.getElementById("pass")
				if(pass.type=="password"){
					pass.type="text";
				}else{
					pass.type="password";
				}
				window.location.href = "http://www.baidu.com";
			}

2.BOM

Day43-DOM&Ajax

1.DOM

​ DOM简单理解就是对页面的标签属性做增删改查的操作。

1.1 元素操作

​ 标签里面有name id value等等元素以及对应的值,我们可以用DOM对象对其进行增删改查

1.2 查找元素

    <script type="text/javascript">
        /*入口函数,可以理解为程序先读取页面再来运行函数,否则从上至下读取的话,找不到内容*/
        window.onload = function(){
            //通过ID属性【唯一性】查找节点
            var div = document.getElementById("mydiv")
            console.debug(div)

            //通过name属性查找节点【数组存储】
            var hob = document.getElementsByName("hobboy")
            console.debug(hob)

            //通过标签名字获取节点[数组存储]
            var input = document.getElementsByTagName("input")
            console.debug(input)

            //找到第一个input标签前的父节点 
            var dv = input[0].parentElement
            console.debug(dv)

            /*PART2:增添标签*/
            var span = document.createElement("span")
            span.innerText="污渍"
            //在document的body里面增添对象  boby不可缺
            document.body.insertBefore(span,dv);
        }

    </script>

1.3 给元素添加属性:

				//入口函数不能忘
				window.onload = function(){
				//获取需要的节点
				var dv = document.getElementById("mydiv")
				//给节点添加属性
				dv.setAttribute("name","name")
				dv.setAttribute("value","射入")
				//给节点添加样式
				dv.style.backgroundColor = "peachpuff"
				
				//添加class属性值
				document.getElementById("div").className="classname";
			}

1.4 给元素添加文本:

			/*文本操作:innerText*/
			var div = document.getElementById("div")
			/*添加*/
			div.innerText="adfasdfasd"
			/*覆盖修改*/
			div.innerText="<input type='text' value='123456'>"
			/*删除*/
			div.innerText="";
			/*查*/
			var text = div.innerText;
			console.debug(text)
			/*文本操作:innerHTML*/
			/**/
			div.innerHTML="dfasdfasd"
			div.innerHTML="<input type='text' value='123456'>"
			console.debug(div.innerHTML)
			

1.5 给元素绑定时间

​ 在js内写方法,然后再标签内插入标签属性,将方法传入进去

          		//属性标签对应的用用户操作      
                onabort		用户终止页面加载。
                onblur		用户离开对象。失去焦点
                onchange	用户改变对象的值。
                onclick		用户点击对象。
                ondblclick	用户双击对象。
                onfocus		和onblur相反)	用户激活对象。
                onkeydown	按下键盘。
                onkeypress	按压键盘。
                onkeyup		松开键盘。
                onload		页面完成加载。注释:在 Netscape 中,当页面加载时会发生该事件。
                onmousedown	用户按鼠标按钮。
                onmousemove	鼠标指针在对象上移动。
                onmouseover	鼠标指针移动到对象上。
                onmouseout	鼠标指针移出对象。
                onmouseup	用户释放鼠标按钮。
                onreset		用户重置表单。
                onselect	用户选取页面上的内容。
                onsubmit	用户提交表单。
                onunload	用户关闭页面。
		<script type="text/javascript">
			function into(){
				//先获取节点
				var dv = window.document.getElementById("d")
				dv.style.backgroundColor = "red";
			}
			function out(){
				//先获取节点
				var dv = window.document.getElementById("d")
				dv.style.backgroundColor = "blue";
			}

		</script>
	</head>
	<body>
		<div id="d">
			<!--	-->
			<input type="button" onmouseover="into()" value="进来玩啊大爷"/>
			<input type="button" onmouseout="out()"  value="慢走,欢迎再来"/>

2.Ajax

​ Ajax就是一个对象,处理异步请求的,可以理解为一个页面分为N个请求,有一个请求响应好了,Ajax就会处理它将已经响应好了的请求先展示出来,实时更新网页(股票网站…等),基本所有的页面都需要Ajax对象处理请求。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-88ARgZS3-1596461980919)(C:\Users\吴永鑫\AppData\Roaming\Typora\typora-user-images\image-20200802102804046.png)]

2.1 get请求Ajax

		function getXhr(){
				var xhr;
				if(window.XMLHttpRequest){
					xhr = new XMLHttpRequest();
				}else{//针对的是低版本的IE浏览器
					xhr = new ActiveXObject("Microsoft.XMLHTTP");
				}
				console.debug(xhr);
				return xhr;
			}
			
			function getTime(){
				var xhr = getXhr();
				//准备请求
				xhr.open("get","/getTime",true);
				//监控状态
				xhr.onreadystatechange = function(){
					if (xhr.readyState == 4 && xhr.status == 200) {
						var text = xhr.responseText;
						console.debug(text)
						//将接收到的文本写进input标签中
						document.getElementById("span").innerText = text;
					}
				}
				//发送请求
				xhr.send();
			}

2.2 Post请求的Ajax

​ post发送请求一定要设置请求头,步骤基本锁定

	function login(){
		//获取标签的value属性值
		var uname = document.getElementById("uname").value;
		var pwd = document.getElementById("pwd").value;
		//不用IE浏览器,直接new出来xhr
		var xhr = new XMLHttpRequest();
		//开启xhr
		xhr.open("post","/login",true);
		//监听状态
		xhr.onreadystatechange=function(){//事件:xhr状态发生改变,就会调用函数[回调函数]
			if(xhr.readyState==4 && xhr.status == 200){//用户名,密码发送到后台,有跳转到成功面,提示用户名面错误
				var text = xhr.responseText;
			    if(text=="true"){//登录成功 雷区:true代表boolean类型,"true"才是string类型
			    	window.location.href="/success.jsp"
			    }else{//登录失败
			    	alert("老弟:你的账户或者面错误,请重新输入")
			    }
			}
		}
		/*Post发送请求:设置请求头*/
		xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");//传递的参数是以普通文本传输的
		var parm = "username="+uname+"&password="+pwd;
		xhr.send(parm);//POST 可以这样发送参数  发送请求
	}

Day44-JQuery

​ JQuery就是JS的一个框架,方便我们装饰前端。

1. 使用JQuery

​ 准备个web项目,然后创建个springMVC框架,在webapp下面创建一个js文件夹,将JQuery的文件导入进去,在前端页面创建的时候引入JQuery文件即可使用。

使用JQuery的时候需要一个入口函数,$(function(){})

2. JQuery选择器

2.1 ID选择器

​ 用$("#id")选择指定id的标签

$(function(){
            //1:id选择器 通过$('#id')来选择
            console.debug($("#aaa"));

2.2 标签选择器

​ 也称元素选择器,直接通过$(“元素名称”)来选择

    		//3:元素选择器,直接通过$("元素名称")来选择
            console.debug($("button").length);//2 2个button标签

2.3 类选择器

​ 通过$(’.类名’)来选择

//2:类选择器 通过$('.类名')来选择
            console.debug($('.abc'));

2.4 通配符选择器

​ 直接通过$("*")来选择,所有的包标签,包括索引html meta script等

	 console.debug($("*").length);// 27

2.5 组合选择器

​ 组合选择器:就是将多个选择器用逗号隔开,将任意选择器查找到的标签合并在一起

	console.debug($("#aaa"),$(".abc"));

2.6 包含选择器

​ 包含选择器,就是找类中类,一层一层的找,譬如我要找按钮11和22,先找class=.abc,再找class=btn,用空格隔开就可以,包含关系可以是直接的也可以是间接的,如果类中类有包含关系,则可以称之为父子选择器

	console.debug($(".abc .btn").length);//2
	
	//父子选择器,和包含选择器差不多意思,但是有限制条件,必须是间接关系的才能找,
    le.debug($(".abc>.btn"));

2.7 兄弟选择器

兄弟选择器:

  • 前面一个选择器 + 后面一个选择器 表示查找前面选择器的标签的后面紧跟的那一个兄弟(同级)标签
  • 前面一个选择器 ~ 后面一个选择器 表示查找前面选择器的标签的后面所有兄弟(同级)标签
  • 注意:前面一个选择器是用来定位的,后面一个选择器才是查找目标元素的
 			console.debug($("#aaa+div"));//Object { 0: div.abc
            console.debug($("#aaa~div").length);//3--> 说明子类中的div是不算的 只有同级的才算

3. 绑定事件

jQueru绑定事件的方法:先用选择器找到该目标元素,再调用事件方法,传入一个function作为参数
       事件方法:就是js中的事件类型单词,在jQuery中全部都封装成了方法名称
 *     click     点击
 *     mouseover  鼠标移入
 *     mousemove  鼠标移动
 *     mouseout   鼠标移出
 *     mousedown  鼠标按下
 *     mouseup       鼠标弹起
 *     dblclick   双击
 *     keydown       键盘按下
 *     keyup     键盘弹起
 *     keypress   键盘敲击
 *     focus     得到焦点
 *     blur      失去焦点
 *     change    内容改变
 *PS:jQuery不仅可以调用事件函数绑定事件,还可以使用bind方法或者on方法来绑定事件
 * bind:$("选择器").bind("事件类型",funcition); 此方法只适用于已存在的标签选择器,不能添加和修改元素标签
 * on:$("选择器").on("事件类型", function(){}); 或者$(document).on("事件类型","选择器",function(){});
 *     on方法不仅可以绑定事件,也可以动态添加元素标签到body上面去
 *
 * off  unbind:两个都是解绑事件 如果没指定解绑什么东西,就指解绑全事件。
		 	$("#btn").click(function(){
                alert("你又被点击了1111");
            });
           
            $("#btn").bind("click",function(){
                alert("你又被点击了222");
            }).mousemove(function () {
                $(this).css("color","red")
            }).mouseout(function () {
                $(this).css("color","blue")
            });

            $("#btn").on("click",function(){
                alert("你又被点击了333");
            });
            $(document).on("click","#btn",function(){
                alert("你又被点击了4444");
            });
            $("input").unbind("click");
        }

4.JQuery遍历

​ 第一种方式:用for循环,和JAVA的for循环一样

            var $obj = $("input:button");
            for(var i = 0 ; i < $obj.length ; i++){
            alert($($obj[i]).val());//注意$obj[i]是一个dom对象

​ 第二种方式:each循环

			var hobbies = $("input[name=hobbies]");
			//jQuery里面的each循环
			hobbies.each(function(){
				//获取当前循环对象checked属性值
				var ck1 = $(this).prop("checked");
				//给checked属性值赋予一个相反的属性值
				$(this).prop("checked",!ck1);

5.展示JSON对象

​ 在标签里面用data-XXX命名,然后在JQuery中用data(“XXX”)取出JSON属性

<script type="text/javascript">
        $(function () {
            var name = $("#btn1").prop("id");
            console.debug(name);
            var aa = $("#btn1").data("aa");
            console.debug(aa);
        })
    </script>
</head>
<body>
    <input type="button" value="标签1" id="btn1" name="按钮1" data-aa='{"name":"伍爱国","age":18}'>
    <input type="button" value="标签2" id="btn2">
		var ck1 = $(this).prop("checked");
			//给checked属性值赋予一个相反的属性值
			$(this).prop("checked",!ck1);

## 5.展示JSON对象

​		在标签里面用data-XXX命名,然后在JQuery中用data(“XXX”)取出JSON属性

```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值