js部分的复习(1)

孤人 提交于 2019-12-17 07:51:03

1.专门对付字符串转换方式:
//parseInt()把一个字符串转换成正数
//parseFloat()吧一个字符串转成浮点数
在这里插入图片描述
在这里插入图片描述
2.运算符
在这里插入图片描述
在这里插入图片描述

3.!非 &&与 ||或
js中属于短路与,只要前面看到false就不看后面了的
js中或属于短路的或,如果第一个true,就不会检查第二个

4.三元运算符
//条件运算符也叫三元运算符
//语法:
// 条件表达式?语句1:语句2;
//执行流程:条件运算符在执行时,首先对条件表达式求值,
//如果为true,则执行语句1,并返回结果
//如果为false,则执行语句2,并返回结果
//如果条件表达式的值为非布尔值,会转换成布尔值,
true?alert(“语句1”):alert(“语句2”);
5.对象
//读取对象中的属性
//语法: 对象.属性名
//如果读取对象中没有的属性,不会报错,会返回undefined

6.this的情况,后面高级部分还会说
//this的使用情况:
//1.当以函数的形式调用,this是window (fun())
//2.当以方法的形式调用时,谁调用的就是谁 (a.name)
//3.当以构造函数的形式调用时,this就是新创建的那个对象

7.数组去重
在这里插入图片描述

8.实现简单的点击轮播图
出现以下几种问题:
1.首先要思考如何实现,将实现需求写出,可能第一次自己动手写,有点生疏,但是总体思路还是有的,将img的src值变成数组内的图片即可,第一点没想通过用数组改变src的值,
2.获取img时用到的getElementsByTagName[0],我用到的是getElementsByName,第二个是用来获取name之类,而且第这两种值得注意的是s的问题,获取到的都是类数组形式,所以要[0]
//getElementsByTagName()可以根据标签名来获取一组元素节点对象
//这个方法会给我们返回一个类数组对象,所有查询到的元素都会封装到对象中
//即使只有一个元素,也会封装到数组中返回

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			window.onload = function(){
				//当点击下一页,会实现向下一页跳转
				// 当点击上一页,实现上一页跳转
				var prev = document.getElementById('prev')
				var next = document.getElementById('next')
				var imgArr = ["img/a.jpg","img/b.jpg","img/c.jpg","img/d.jpg","img/e.jpg"]
				var index = 0
				var img = document.getElementsByTagName('img')[0]
				
				
				prev.onclick = function(){
					index--
					 if(index < 0){
						 index = imgArr.length - 1
					  }
					img.src = imgArr[index]
				}
				next.onclick = function(){
					index++
					if(index > imgArr.length - 1){
					 index = 0 
					 }
					img.src = imgArr[index]
					
					
				}
			}
			
			
		</script>
	<style type="text/css">
		*{
			padding: 0;
			margin: 0;
		}
		#outer{
			width: 500px;
			margin: 50px auto;
			background-color:blueviolet ;
			padding: 10px;
			text-align: center;
			
		}
		img{
			width: 500px;
			height: 333px;
			display: block;
		}
	</style>
	<body>
		<div id="outer">
			<p id="info"></p>
			<img src="img/a.jpg" alt="冰棍" />
			<button id="prev">上一张</button>
			<button id="next">下一张</button>
		</div>
	</body>
</html>

9.使用DOM操作CSS
box1.style.width = “300px”;
box1.style.height = “100px”
//注意css中样式名含有减号
//这种名字不合法
//需要将这种样式名修改为驼峰命名法
box1.style.backgroundColor = “yellow”;
//通过style属性设置的样式都是内联样式
//而内联样式有比较高的优先级,所以通过js修改的样式往往会立即显示
//但是如果在样式中写了!important,name样式会有最高的优先级,导致js修改样式失效
//读取就是不用赋值 box1.style.width
//读的是内联样式

10.实现全选的练习(后面的jQuery会有更简单的方法,但是这里为了更好地理解js,所以有点耐心,我们继续,这里就不考虑代码优化的问题了,可以设置方法,传一些实参简化,为了理解,我们复杂点一步步写)

这里总结了以下几点问题:
1.考虑每个var items = document.getElementsByName(‘items’)是否声明到函数作用域的外面,其实是可以的,一开始担心的是声明到外面,里面的操作会改变items的值,导致一些错误,后来结论是,我们已经考虑到每个细节,所以声明到外面没有问题,唯一有问题的是,在/当点击全选/全不选按钮时,我考虑的向反选状态一样去设置,这样没问题,但是这样就不能声明到外面了,因为一旦选择了一个items,就会导致点击全选时反选了,所以我们设置状态同步就可以声明到外面

2.这里有一种思路,如果正面想太过于复杂,我们可以逆向思维,通过先设置它的值为true,如果有一个不是选中的,我们就让他为false,这里值得思考总结

3.这里算考虑不周全,在单独设置items的点击事件时,虽然也是运用上面类似的方法,但是需要注意嵌套两次循环才可以,因为第一次循环的i你不能用,只是获取到当前是哪个items,所以你还需要再遍历以下

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			window.onload = function(){
				var checkedAllBtn = document.getElementById('checkedAllBtn')
				var checkedNoBtn = document.getElementById('checkedNoBtn')
				var checkedRevBtn = document.getElementById('checkedRevBtn')
				var sendBtn = document.getElementById('sendBtn')
				var checkedAllBox = document.getElementById('checkedAllBox')
				//当点击全选时,所有按钮都选上
				checkedAllBtn.onclick = function(){
					var items = document.getElementsByName('items')//等下试试先声明到上面看看
					for(i = 0; i < items.length; i++){
						items[i].checked = true	
					}
					checkedAllBox.checked = true
				}
				//当点击全不选按钮时,所有按钮都不选
				checkedNoBtn.onclick = function(){
					var items = document.getElementsByName('items')
					for(i = 0; i < items.length; i++){
						items[i].checked = false
						
					}
					checkedAllBox.checked = false
				}
				//当点击反选按钮时,items选择相反的值
				checkedRevBtn.onclick = function(){
					var items = document.getElementsByName('items')
					checkedAllBox.checked = true
					for(i = 0; i < items.length; i++){
						items[i].checked = !items[i].checked
						//这里出现了一种情况,如果反选时全选了,是不是需要让checkedAllBox也选中,全不选时,需要让checkedAllBox也全不选中,所以首先判断时否全都选择了,如果是就加上checked=true,反之false,if加在哪,
						// 这里我一直在想怎么知道所有的items全部变没变成选中的状态,其实那样太过于复杂,
						// 我们先让checkAllBox为true,只要我们知道有一个items未被选中,我们就改变它为false
						if(!items[i].checked){
							checkedAllBox.checked = false
						}
					}
				}
				//当点击全选/全不选按钮,达到对应效果
				checkedAllBox.onclick = function(){
					var items = document.getElementsByName('items')//等下试试先声明到上面看看
					for(i = 0; i < items.length; i++){
						// items[i].checked = !items[i].checked、、这里如果将var items生命到函数作用域外,这里会出现你选一个items,再点击全选/全不选,出现了反选的情况,
						items[i].checked = this.checked//这里表示了状态同步,将checkedAllBox和所有的items设置一样,因为一直考虑到了items的各种状况,所以是可以将var items声明到最上方的
					}
				}
				//这里实现完了,但是如果单独全部点击items时,要让全选/全不选 做出相应变化
				var items = document.getElementsByName('items')
				for(i = 0; i < items.length; i++){
					items[i].onclick =function(){
						checkedAllBox.checked = true
						for(var j=0 ; j<items.length ; j++){
								if(!items[j].checked){
									//将checkedAllBox设置为没选中状态
									checkedAllBox.checked = false;
									//一旦进入判断,这里是为了,一旦有一个没选中,就不必要判断了,优化
									break;
								};
						}
					}
				}
			}
		</script>
	</head>
	<body>
		<form method="post" action="">
			你爱好的运动是?<input type="checkbox" id="checkedAllBox" />全选/全不选 
			
			<br />
			<input type="checkbox" name="items" value="足球" />足球
			<input type="checkbox" name="items" value="篮球" />篮球
			<input type="checkbox" name="items" value="羽毛球" />羽毛球
			<input type="checkbox" name="items" value="乒乓球" />乒乓球
			<br />
			<input type="button" id="checkedAllBtn" value="全 选" />
			<input type="button" id="checkedNoBtn" value="全不选" />
			<input type="button" id="checkedRevBtn" value="反 选" />
			<input type="button" id="sendBtn" value="提 交" />
		</form>
		
	</body>
</html>

在这里插入图片描述

11.通过表格来增加新员工(后面的jQ中也有简单的方法,还是那句话,耐心体会js,加油,11点半多了,饿了。。。这里不写那种
// var nameTd = document.createElement(“td”);
// var emailTd = document.createElement(“td”);
// var salaryTd = document.createElement(“td”);
这样的太过于繁琐,了解这就行,我们换一种方式综合来写)

这里唯一有疑问的就是这里:
var a = tr.getElementsByTagName(“a”)[0];,在新添加的a中为什么要写成[0],我知道这样回来的是一个类似数组的东西,所以要写[0],但是如果添加多次,不是始终作用于索引为0的a吗,后来一想,当点击一次添加,点击一次添加,始终都是重新触发函数,所以每个a都是新的,不发生关系,只有点击了添加,才触发函数。
另外可能就是对parentNode的不了解,这个东西是找当前父级,parentNode[0]这种是不可能的,.parentNode.parentNode可以继续往上找,children是可以children[0]这么写的
另外看这里
在这里插入图片描述
这就是为什么最后要将tr放在tbody的原因,table它默认有tbody
这里可以代码优化,将a的方法封装起来,但是为了方便看,就不优化了,其实是懒,哈哈。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			window.onload =function(){
				//首先先设置上面的部分
				// 点击delete删除对应的行
				var allA = document.getElementsByTagName('a')
				for(i = 0; i < allA.length; i++){
					allA[i].onclick = function(){
						var tr = this.parentNode.parentNode
						var name = tr.children[0].innerHTML
						if(confirm("确认删除"+ name +"么?" )){
							//删除tr
							tr.parentNode.removeChild(tr);
						}
						return false;//来取消a标签的默认跳转
					}
				}
			var addEmpButton = document.getElementById("addEmpButton");
			addEmpButton.onclick = function(){
				// alert("hello")
				//获取到用户填写的信息
				//获取我们员工的名字
				var name = document.getElementById("empName").value;
				//获取员工的邮件
				var email = document.getElementById("email").value;
				//获取员工的工资
				var salary = document.getElementById("salary").value;
				//创建一个tr
				var tr = document.createElement("tr");
				//设置tr中的内容
				tr.innerHTML =  "<td>"+name+"</td>"+
								"<td>"+email+"</td>"+
								"<td>"+salary+"</td>"+
								"<td><a href='javaScript:;'>Delete</a></td>";
				//获取刚刚添加的a元素,并为其绑定单击响应函数
				var a = tr.getElementsByTagName("a")[0];
				a.onclick = function(){
						var tr = this.parentNode.parentNode
						var name = tr.children[0].innerHTML
						if(confirm("确认删除"+ name +"么?" )){
							//删除tr
							tr.parentNode.removeChild(tr);
						}
						return false;
					}
				// 获取table
				var employeeTable = document.getElementById("employeeTable");
				//获取employeeTable中的<tbody>
				var tbody = employeeTable.getElementsByTagName("tbody")[0];
				//将tr添加到tbody中
				tbody.appendChild(tr);
				}
			}	
		</script>
	</head>
	<body>
		<style type="text/css">
			#total {
				width: 450px;
				margin-left: auto;
				margin-right: auto;
			}
			ul {
				list-style-type: none;
			}
			li {
				border-style: solid;
				border-width: 1px;
				padding: 5px;
				margin: 5px;
				background-color: #99ff99;
				float: left;
			}
			.inner {
				width: 400px;
				border-style: solid;
				border-width: 1px;
				margin: 10px;
				padding: 10px;
				float: left;
			}
			
			#employeeTable {
				border-spacing: 1px;
				background-color: black;
				margin: 80px auto 10px auto;
			}			
			th,td {
				background-color: white;
			}			
			#formDiv {
				width: 250px;
				border-style: solid;
				border-width: 1px;
				margin: 50px auto 10px auto;
				padding: 10px;
			}			
			#formDiv input {
				width: 100%;
			}			
			.word {
				width: 40px;
			}			
			.inp {
				width: 200px;
			}
		</style>
		<table id="employeeTable">
			<tr>
				<th>Name</th>
				<th>Email</th>
				<th>Salary</th>
				<th>&nbsp;</th>
			</tr>
			<tr>
				<td>Tom</td>
				<td>tom@tom.com</td>
				<td>5000</td>
				<td><a href="deleteEmp?id=001">Delete</a></td>
			</tr>
			<tr>
				<td>Jerry</td>
				<td>jerry@sohu.com</td>
				<td>8000</td>
				<td><a href="deleteEmp?id=002">Delete</a></td>
			</tr>
			<tr>
				<td>Bob</td>
				<td>bob@tom.com</td>
				<td>10000</td>
				<td><a href="deleteEmp?id=003">Delete</a></td>
			</tr>
		</table>
		
		<div id="formDiv">
		
			<h4>添加新员工</h4>
		
			<table>
				<tr>
					<td class="word">name: </td>
					<td class="inp">
						<input type="text" name="empName" id="empName" />
					</td>
				</tr>
				<tr>
					<td class="word">email: </td>
					<td class="inp">
						<input type="text" name="email" id="email" />
					</td>
				</tr>
				<tr>
					<td class="word">salary: </td>
					<td class="inp">
						<input type="text" name="salary" id="salary" />
					</td>
				</tr>
				<tr>
					<td colspan="2" align="center">
						<button id="addEmpButton" value="abc">
							Submit
						</button>
					</td>
				</tr>
			</table>
		
		</div>
		
	</body>
</html>

ok,上午就到这,下午要上课,晚上我们继续,加油吖!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!