JavaWeb——JavaScript篇

14 篇文章 0 订阅

一.JavaScript介绍:

  • 1.1 javascript介绍
    在这里插入图片描述
    Javascript与java没有关系(雷锋和雷峰塔),它不是编程语言(脚本语言)
  • 1.2javascript的作用?
    HTML:它是整个网站的骨架。
    CSS:它是对整个网站骨架的内容进行美化(修饰)
    Javascript:它能够让整个页面具有动态效果。
  • 1.3javascript的组成部分
    在这里插入图片描述
    ECMAScript:它是javascript的核心(语法、变量、数据类型、语句、函数……)
    DOM:document object model 整个文档对象
    BOM:浏览器对象
  • 1.4javascript语法

区分大小写
变量是弱类型的(String str=”aaa” ,var str=”123”?
每行结尾的分号可有可无(建议大家写上)
注释与java、php等语言相同。

  • 1.5javascript数据类型
    Javascript数据类型分为原始数据类型和引用数据类型
    原始数据类型:
    string、number、boolean、null、undefined
    引用数据类型:
    在这里插入图片描述
  • 1.6获取元素内容
    获取元素
    document.getElementById(“id名称”);
    获取元素里面的值
    document.getElementById(“id名称”).value;
  • 1.7javascripte的输出
    警告框:alert();
    向页面指定位置写入内容:innerHTML(属性)
    向页面写入内容:document.write(“”);

二.案例步骤分析:

  • 使用JS完成注册表单数据校验

  • 用户在进行注册的时候会输入一些内容,但是有些用户会输入一些不合法的内容,这样会导致服务器的压力过大,此时我们需要对用户输入的内容进行一个校验(前端校验和后台校验),前端校验防君子不防小人。
    在这里插入图片描述
    步骤分析:
    第一步:确定事件(onsubmit)并为其绑定一个函数
    第二步:书写这个函数(获取用户输入的数据)
    第三步:对输入的数据进行判断(非空)
    第四步:如果输入的内容为空,给出错误提示信息(alert),不让表单提交
    第五步:如果输入的内容合法,让表单提交。

  • 代码实现:
    Html部分代码:
    为表单绑定一个事件

<form action="#" method="get" onsubmit="return checkForm()">

对需要校验的输入项目定义id

<input type="text" name="user" id="user" />

JavaScript部分代码:

<script type="text/javascript">
	function checkForm(){
		/*校验用户名*/
		//alert("aa");
		//获取用户输入的数据
		var uValue =  document.getElementById("user").value;
		//alert(uValue);
		if(uValue==""){
			//给出错误提示信息
			alert("用户名不能为空!");
			return flase;
		}
		
		/*校验邮箱*/
		var Evalue = document.getElementById("email").value;
		if(!/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/.test(Evalue)){
			//给出错误提示信息
			alert("邮箱格式不正确!");
			return false;
		}
	}
</script>

三.使用JS完成首页轮播图效果案例

在这里插入图片描述
获取元素 document.getElementById(“id名称”)

事件(onload)
确定事件:onload 加在body里面!

<body onload="init()">

定时操作:setInterval(“changeImg()”,3000);

  • 步骤分析
    第一步:确定事件(页面加载事件onload)并为其绑定一个函数
    第二步:书写这个函数(设置一个定时操作);
    第三步:书写定时操作里面的函数
    第四步:获取图片的位置
    第五步:为该图片设置src属性值。

部分代码显示:

<script>
	function init(){
		setInterval("changeImg()",3000);
	}
	
	var i=1;
	function changeImg(){
		i++;
		var imgEl = document.getElementById("img1");
		imgEl.src="../img/"+i+".jpg";
		if(i==3){
			i=0;
		}
	}
	
</script>

四.使用JS完成页面定时弹出广告

我们希望在首页中的顶部做一个定时弹出广告图片。其实现效果如下
在这里插入图片描述

获取图片的位置(document.getElementById(“”))
隐藏图片:display:none
定时操作:setInterval(“显示图片的函数”,3000);
确定事件(<body onload="init()">)

  • 步骤分析
    第一步:确定事件(页面加载事件onload)并为其绑定一个函数init()
    第二步:在init函数中设置一个显示图片的定时操作。
    第三步:书写显示图片的函数(获取图片元素,设置其display属性为block)
    第四步:设置一个隐藏图片的定时操作
    第五步:书写隐藏图片的函数(获取图片元素,设置其display属性为none)

部分代码:

<script type="text/javascript">
	var time;
	function init(){
		//设置显示图片的定时操作
		time = setInterval("showAd()",3000);
	}
	
	//显示图片的函数
	function showAd(){
		//获取广告图片的
		var imgEl = document.getElementById("img1");
		//设置图片的属性(display)让其显示
		imgEl.style.display="block";
		
		//清除显示图片的定时操作
		clearInterval(time);
		
		//设置隐藏广告图片的定时操作
		time = setInterval("hiddenAd()",3000);
	}
	
	//书写隐藏广告图片的函数
	function hiddenAd(){
		//获取广告图片并设置隐藏的属性
		document.getElementById("img1").style.display="none";
		//清除隐藏图片的定时操作
		clearInterval(time);
	}
</script>

  • 5.1 javascript的引入方式
  • 内部引入方式
    直接将javascript代码写到<script type=”text/javascript”></script>
  • 外部引入方式
    需要创建一个.js文件,在里面书写javascript代码,然后在html文件中通过script标签的src属性引入该外部的js文件
  • 5.2 BOM对象
    BOM对象:浏览器对象模型(操作与浏览器相关的内容)
  • 1.Window对象
    Window 对象表示浏览器中打开的窗口
    在这里插入图片描述
    setInterval():它有一个返回值,主要是提供给clearInterval使用。
    setTimeout():它有一个返回值,主要是提供给clearTimeout使用。
    clearInterval():该方法只能清除由setInterval设置的定时操作
    clearTimeout():该方法只能清除由setTimeout设置的定时操作
  • 弹出框的几个方法:
<script>
	//警告框
	//alert("aaa");
	
	//确认按钮
	//confirm("您确认删除吗?");
	
	//提示输入框
	prompt("请输入价格:");
</script>

  • 2.Location对象
    Location 对象包含有关当前 URL 的信息。
    在这里插入图片描述
<html>
	<head>
		<meta charset="UTF-8">
		<title>location对象</title>
		<script>
			function tiao(){
				window.location.href="http://www.itcast.cn";
			}
		</script>
	</head>
	<body>
		<a href="#" onclick="tiao()">跳转到传智播客首页</a>
	</body>
</html>

  • 3.History对象
    History 对象包含用户(在浏览器窗口中)访问过的 URL。
    在这里插入图片描述
    历史页面:使用location页面(把href属性值改为当前的history)

History页面代码:

<input type="button"  value="返回上一个页面" onclick="javascript:history.back()"/>

go(参数)
参数:-1 返回上一个历史记录页面;-2返回上上一个历史记录页面,1进入下一个历史记录页面。

让按钮点击失效:

onclick=”javascript:volid(0)”
  • 4.Navigator对象
    Navigator 对象包含有关浏览器的信息。(该对象开发中不怎么常用)
    在这里插入图片描述
  • 5.Screen对象
    在这里插入图片描述

使用JS完成注册页面表单校验

1.需求分析
之前我们已经使用弹出框的方式实现了表单校验的功能,但是此种方式用户体验效果极差!我们希望做成如下这种效果:
在这里插入图片描述
使用事件(聚焦事件onfocus和离焦事件onblur),之前使用onsubmit也需要!
使用
向页面指定位置写入内容:innerHTML属性(该属性的值存在覆盖现象)

<input type="text" name="user" id="user" onfocus="showTips('user','用户名必须以字母开头!')" onblur="check('user','用户名不能为空!')"/><span id="userspan"></span>
  • 步骤分析
    第一步:确定事件(给出提示信息使用聚焦事件,给出校验结果信息使用离焦事件)并为其绑定函数
    第二步:聚焦事件绑定的函数中(获取span给出提示信息)
    第三步:离焦事件绑定的函数中(获取用户输入的内容进行判断)
    第四步:如果失败,在span位置给出错误提示信息,如果成功,让span内容为空。
    Javascript部分代码:
<sctript>
	function showTips(id,info){
		//获取span元素,给出提示信息
		document.getElementById(id+"span").innerHTML="<font color='gray'>"+info+"</font>";
	}
	
	function check(id,info){
		//获取用户输入的数据
		var uValue = document.getElementById(id).value;
		//进行判断
		if(uValue==""){
			//在span位置给出错误提示信息
			document.getElementById(id+"span").innerHTML="<font color='red'>"+info+"</font>";
		}else{
			document.getElementById(id+"span").innerHTML="";
		}
	}
	
</script>

总结:

  • javascript的事件
    在这里插入图片描述
    onfocus/onblur:聚焦离焦事件,用于表单校验的时候比较合适。
    onclick/ondblclick:鼠标单击和双击事件
    onkeydown/onkeypress:搜索引擎使用较多
    onload:页面加载事件,所有的其它操作(匿名方式)都可以放到这个绑定的函数里面去。如果是有名称,那么在html页面中只能写一个。
    onmouseover/onmouseout/onmousemove:购物网站商品详情页。
    onsubmit:表单提交事件 ,有返回值,控制表单是否提交。
    onchange:当用户改变内容的时候使用这个事件(二级联动)

  • 案例
    使用JS完成表格的一个隔行换色
    我们希望在后台页面中实现一个隔行换色的效果显示所有的用户信息,显示效果如下:
    在这里插入图片描述

  • 新标签的学习

    <thead>
    		<tr>
    			<th></th>
    </tr>
    </thead>
    	<tbody>
    		<tr>
    			<td></td>
    </tr>
    </tbody>

确定事件(页面加载事件onload)

获取元素:获取表格(document.getElementById()),最终是为了获取表格中tbody里面的行数(长度)。

Tbody里面的行数(rows.length)

JS的遍历(for循环)

获取奇数行和偶数行(对遍历中角标对2取余)

设置背景颜色(.style.backgroundColor)

  • 步骤分析
    第一步:确定事件(onload)并为其绑定一个函数
    第二步:书写函数(获取表格)
    第三步:获取tbody里面的行数
    第四步:对tbody里面的行进行遍历
    第五步:获取奇数行和偶数行(角标对2取余)
    第六步:分别对奇数行和偶数行设置背景颜色
<script>
	window.onload = function(){
		//1.获取表格
		var tblEle = document.getElementById("tbl");
		//2.获取表格中tbody里面的行数(长度)
		var len = tblEle.tBodies[0].rows.length;
		//alert(len);
		//3.对tbody里面的行进行遍历
		for(var i=0;i<len;i++){
			if(i%2==0){
				//4.对偶数行设置背景颜色
				tblEle.tBodies[0].rows[i].style.backgroundColor="pink";
			}else{
				//5.对奇数行设置背景颜色
				tblEle.tBodies[0].rows[i].style.backgroundColor="gold";
			}
		}
	}
</script>

  • 实现一个表格的高亮显示
    为了加强对事件的学习,添加此案例:

分析:
第一步:确定事件(onmouseover和onmouseout)并分别为其绑定一个函数
第二步:获取鼠标移上去的那行,对其设置背景颜色

<tr onmouseover="changeColor('tr1','over')" id="tr1" onmouseout="changeColor('tr1','out')">
<script>
	function changeColor(id,flag){
		if(flag=="over"){
			document.getElementById(id).style.backgroundColor="red";
		}else if(flag=="out"){
			document.getElementById(id).style.backgroundColor="white";
		}
	}
</script>

案例

我们希望在后台系统实现一个批量删除的操作(全选所有的复选框),显示效果如下:
在这里插入图片描述
确定事件(鼠标单击事件onclick),事件绑定到编号前面的复选框里面

获取编号前面的复选框的状态(是否选中)
获取复选框:var checkAllEle = document.getElementById(“id”)
获取复选框的状态:checkAllEle.checked?

获取下面所有的复选框:
document.getElementsByName(“name”);

  • 步骤分析
    第一步:确定事件(onclick)并为其绑定一个函数
    第二步:书写函数(获取编号前面的复选框,获取其状态)
    第三步:判断编号前面复选框的状态(如果为选中,获取下面所有的复选框,并将其状态置为选中)
    第四步:判断编号前面复选框的状态(如果为未选中,获取下面所有的复选框,并将其状态置为未选中)
    HTML代码:
    复选框前面的:
<th><input type="checkbox" onclick="checkAll()" id="checkAll"/></th>

下面所有的复选框:

<td><input type="checkbox" name="checkOne"/></td>

部分代码显示:

<script>
	function checkAll(){
		//1.获取编号前面的复选框
		var checkAllEle = document.getElementById("checkAll");
		//2.对编号前面复选框的状态进行判断
		if(checkAllEle.checked==true){
			//3.获取下面所有的复选框
			var checkOnes = document.getElementsByName("checkOne");
			//4.对获取的所有复选框进行遍历
			for(var i=0;i<checkOnes.length;i++){
				//5.拿到每一个复选框,并将其状态置为选中
				checkOnes[i].checked=true;
			}
		}else{
			//6.获取下面所有的复选框
			var checkOnes = document.getElementsByName("checkOne");
			//7.对获取的所有复选框进行遍历
			for(var i=0;i<checkOnes.length;i++){
				//8.拿到每一个复选框,并将其状态置为未选中
				checkOnes[i].checked=false;
			}
		}
	}
</script>

javascript的DOM操作

在这里插入图片描述
Document:整个html文件都成为一个document文档
Element:所有的标签都是Element元素
Attribute:标签里面的属性
Text:标签中间夹着的内容为text文本
Node:document、element、attribute、text统称为节点node.

  • 1.Document对象
    每个载入浏览器的 HTML 文档都会成为 Document 对象
    在这里插入图片描述
    后面两个方法获取之后需要遍历!

以下两个方法很重要,但是在手册中查不到!
创建文本节点:document.createTextNode()
创建元素节点:document.createElement()

  • 2.Element对象
    我们所认知的html页面中所有的标签都是element元素
    element.appendChild()
    向元素添加新的子节点,作为最后一个子节点。
    element.firstChild
    返回元素的首个子节点。
    element.getAttribute()
    返回元素节点的指定属性值。
    element.innerHTML
    设置或返回元素的内容。
    element.insertBefore()
    在指定的已有的子节点之前插入新节点。
    element.lastChild
    返回元素的最后一个子元素。
    element.setAttribute()
    把指定属性设置或更改为指定值。
    element.removeChild()
    从元素中移除子节点。
    element.replaceChild()
    替换元素中的子节点。
  • 3.Attribute对象:
    我们所认知的html页面中所有标签里面的属性都是attribute
    在这里插入图片描述
    • DOM练习
      在页面中使用列表显示一些城市
<ul>
	<li>北京</li>
	<li>上海</li>
	<li>广州</li>
</ul>
  • 北京
  • 上海
  • 广州
我们希望点击一个按钮实现动态添加城市。 分析: 事件(onclick) 获取ul元素节点 创建一个城市的文本节点 创建一个li元素节点 将文本节点添加到li元素节点中去。 使用element里面的方法appendChild()来添加子节点

JS代码:

<script>
	window.onload = function(){
		document.getElementById("btn").onclick = function(){
			//1.获取ul元素节点
			var ulEle = document.getElementById("ul1");
			//2.创建城市文本节点
			var textNode = document.createTextNode("深圳");//深圳
			//3.创建li元素节点
			var liEle = document.createElement("li");//<li></li>
			//4.将城市文本节点添加到li元素节点中去
			liEle.appendChild(textNode);//<li>深圳</li>
			//5.将li添加到ul中去
			ulEle.appendChild(liEle);
		}
	}
</script>		

HTML代码:

<input type="button" value="添加新城市" id="btn"/>
<ul id="ul1">
	<li>北京</li>
	<li>上海</li>
	<li>广州</li>
</ul>

案例:使用JS完成省市二级联动

  • 需求分析
    我们希望在注册页面中添加一个字段(籍贯),当用户选择一个具体的省份,在后面的下拉列表中动态加载该省份下所有的城市。显示的效果如下:
    在这里插入图片描述
    事件(onchange)
    使用一个二维数组来存储省份和城市(二维数组的创建?)
    获取用户选择的省份(使用方法传参的方式:this.value)
    遍历数组(获取省份与用户选择的省份比较,如果相同了,继续遍历该省份下所有的城市)
    创建文本节点和元素节点并进行添加操作

createTextNode()
createElement()
appendChild()

  • 步骤分析
    第一步:确定事件(onchange)并为其绑定一个函数
    第二步:创建一个二维数组用于存储省份和城市
    第三步:获取用户选择的省份
    第四步:遍历二维数组中的省份
    第五步:将遍历的省份与用户选择的省份比较
    第六步:如果相同,遍历该省份下所有的城市
    第七步:创建城市文本节点
    第八步:创建option元素节点
    第九步:将城市文本节点添加到option元素节点中去
    第十步:获取第二个下拉列表,并将option元素节点添加进去
    第十一步:每次操作前清空第二个下拉列表的option内容。
    JS代码:
<script>
	//1.创建一个二维数组用于存储省份和城市
	var cities = new Array(3);
	cities[0] = new Array("武汉市","黄冈市","襄阳市","荆州市");
	cities[1] = new Array("长沙市","郴州市","株洲市","岳阳市");
	cities[2] = new Array("石家庄市","邯郸市","廊坊市","保定市");
	cities[3] = new Array("郑州市","洛阳市","开封市","安阳市");
	
	function changeCity(val){
		
		//7.获取第二个下拉列表
		var cityEle = document.getElementById("city");
		
		//9.清空第二个下拉列表的option内容
		cityEle.options.length=0;
		
		//2.遍历二维数组中的省份
		for(var i=0;i<cities.length;i++){
			//注意,比较的是角标
			if(val==i){
				//3.遍历用户选择的省份下的城市
				for(var j=0;j<cities[i].length;j++){
					//alert(cities[i][j]);
					//4.创建城市的文本节点
					var textNode = document.createTextNode(cities[i][j]);
					//5.创建option元素节点
					var opEle = document.createElement("option");
					//6.将城市的文本节点添加到option元素节点
					opEle.appendChild(textNode);
					//8.将option元素节点添加到第二个下拉列表中去
					cityEle.appendChild(opEle);
				}
			}
		}
	}
</script>

HTML代码:

<select onchange="changeCity(this.value)">
	<option>--请选择--</option>
	<option value="0">湖北</option>
	<option value="1">湖南</option>
	<option value="2">河北</option>
	<option value="3">河南</option>
</select>
<select id="city">
	
</select>

  • 总结:

  • javascript内置对象
    在这里插入图片描述

  • 1.Array对象:
    数组的创建:
    在这里插入图片描述
    数组的特点:
    长度可变!数组的长度=最大角标+1

  • 2.Boolean对象:
    对象创建:
    在这里插入图片描述
    如果value 不写,那么默认创建的结果为false

  • 3.Date对象:
    getTime()
    返回 1970 年 1 月 1 日至今的毫秒数。
    解决浏览器缓存问题

  • 4.String对象
    match()
    找到一个或多个正则表达式的匹配。
    substr()
    从起始索引号提取字符串中指定数目的字符。
    substring()
    提取字符串中两个指定的索引号之间的字符。
    例子:

<script>
	var str = "-a-b-c-d-e-f-";
	var str1 = str.substr(2,4);//-b-c
	//alert(str1);
	
	var str2 = str.substring(2,4);//-b
	alert(str2);
</script>

  • 5.RegExp对象
    正则表达式对象
    test
    检索字符串中指定的值。返回 true 或 false。

  • 全局函数
    全局属性和函数可用于所有内建的 JavaScript 对象
    在这里插入图片描述
    关于编码和解码的一组方法:

<script>
	var str = "张三";
	//alert(encodeURI(str));//%E5%BC%A0%E4%B8%89
	//alert(encodeURIComponent(str));//%E5%BC%A0%E4%B8%89
	
	//alert(decodeURI(encodeURI(str)));//张三
	//alert(decodeURIComponent(encodeURIComponent(str)));//张三
	
	var str1 = "http://www.itheima.cn";
	//alert(encodeURI(str1));//http://www.itheima.cn
	//alert(encodeURIComponent(str1));//http%3A%2F%2Fwww.itheima.cn
	
	//alert(decodeURI(encodeURI(str1)));//http://www.itheima.cn
	//alert(decodeURIComponent(encodeURIComponent(str1)));//http://www.itheima.cn
	
	var str2 = "alert('abc')";
	//alert(str2);
	eval(str2);
	
</script>

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值