zoukankan      html  css  js  c++  java
  • java day18第十八课JavaScript、DOM、jQuery

    JavaScript概述

    JavaScript是基于对象和事件驱动的脚本语言,主要应用在客户端。
    特点:
    1、交互性:它可以做的就是信息的动态交互
    2、安全性:不允许直接访问本地磁盘
    3、跨平台性:主要是可以解释Js的浏览器都可以执行,与平台无关。
    

    JavaScript与Java不同

    1、Js是Netscape公司的产品。前身是LiveScript;java是sun公司的产品,现在是Oracle公司的产品
    2、Js是基于对象,Java是面向对象。
    3、Js值需解释就可以执行,Java需要先编译成字节码文件,再执行。
    4、Js是弱类型,Java是强类型
    

    JavaScript与Html的结合方式

    想要将其他代码融入到Html中,都是以标签的形式
    1、Js代码存放在标签对<script> js code... </script>
    2、当有多个html页面使用到相同的JS脚本时,可以将js代码封装到一个文件中,只要在script标签的src属性引入一个js文件。(方便后期维护,扩展)
    注意:如果在script标签中定义了src属性,name标签中的内容不会被执行。
    例:<script src="test.js" type="rext/javascript"></script>
    
    注:规范中script标签早期有一个属性language,而现在使用type属性。
    
    

    JavaScript语法

    每一种语言都有自己的语法规则,JS语法与Java很像,所以学习起来比较容易。Js中也一样有变量,语句,函数,数组等常见语言组成元素。
    
    通常高级程序设计语言所包含的语法内容:
    1、关键字:该语言中被赋予了特殊含义的单词。
    2、标示符:用于标示数据所表达的符号。通常可以理解为在程序中自定义的名称。比如变量名,函数名。
    3、注释:注释说明解释程序,用于调试程序。
    4、变量:用于标示内存中一片空间。用于存储数据,该空间中的数据是可以变化的。什么时候使用变量?当数据不确定的时候。
    	通过关键字var来定义,弱类型既类型既是不用指定具体的数据类型。
    	例:var x = 3; x = "heelo";
    	注:Js中也属的常量值,undefined,当变量没有初始化就被使用,该变量的值就是undefined(未定义)。
    	注意:Javascript的语句在结尾处是可以不用分号结束的,非严谨语言的特点。
    但为了符合编程规范,需要像java一样定义结束符。
    而且有些情况是必须写分号的,如:var x = 3; var y = 5;如果两条语句写在同一行,就需要分号隔开。
    	全局变量和局部变量体验?
    	在函数里面定义的变量为局部的,在java脚本里面定义的变量为全局的
    	
    5、运算符:可以让数据进行运算的符号。
    	算数运算符
    		+ - * / % ++ --
    		注意:在js中,false默认是0或者null。非0或者非null就是true默认为1;所以:alert(1+true)为2;
    	赋值运算符
    		= += -= *= /= %=
    		例如:
    			var a = 3;
    			a = a+3;
    			alert(a);
    	比较运算符(运算结果要么是true要么是false)
    		> < >= <= != ==
     		例如:
    			var a = 3;
    			alert(a==4);//false
    	逻辑运算符(用来连接两个boolean型的表达式)
    		&&  || !
    		例如:
    			var a = 3;
    			alert(a>2 && a<4); 
    			
    	位运算符
    		& | ^ >> << >>>
    		var a = 6;
    		alert(a&3);//2
    		alert(5^3^3);//5
    		alert(a>>>1);//3
    		alert(a<<2);//24
    	
    	三元运算符
    		? :
    		alert(3>1?alert("yes"):alert("0"))
    	typeof:判断属于什么类型?
    6、语句:用于对程序的运行流程进行控制的表达式。
    	(1)、顺序结构
    		从上往下执行
    		例如:
    		alert("a");
    		alert("b");
    		//输出顺序a,b
    	
    	(2)、判断语句
    		var x = 3;
    		if(x==3){
    			alert("yes")
    		}else{
    			alert("no");
    		}
    		
    		if(x=4){//此种情况注意:这里相当于重新给x赋值
    			alert("yes")
    		}else{
    			alert("no");
    		}
    		
    		综合上述所以我们建议写法
    		if(4==x){//如果写成4=x会报错
    			alert("yes")
    		}else{
    			alert("no");
    		}
    	(3)、选择结构
    		var a = "b"
    		switch(a){
    			case "a":alert("a");break;
    			case "b":alert("b");break;
    			case "c":alert("c");break;
    			default:
    				alert("输入的是没有选项的");
    				break;
    		}
    		判断语句有if和switch语句。如果有固定的几个选项建议使用switch。不过开发过程中,switch用的比较少
    	(4)、循环结构
    		var a = 3;
    		while(a<3){
    		alert("a="+a);
    		//将数据直接写入到当前页面当中
    		document.write("a="+a);
    		a++;
    		}
    		
    		for(var i = 0;i<=4;i++){
    			document.write("i="+i);
    		}
    	(5)、其他语句
    		break:跳出选择,跳出循环结构;
    		contine:用于循环语句,结束本次循环,继续下次循环
    	
    7、函数:用于对功能代码进行封装,便于提高复用性。
    	函数就是一个功能的封装体;
    	定义功能通常需要两个明确:
    	(1)、功能的结果;
    	(2)、功能实现中的参与运算的未知的内容;
    	js中定义函数的格式:
    		通过指定关键字来定义:
    		function 函数名(参数列表){
    			函数体;
    			return 返回值;//如果没有具体的返回值,return语句可以不写;
    		}
    		
    	函数的注意细节:
    		a、只要使用函数的名称就是对这个函数的调用
    		b、函数中有一个数组在对传入的参数进行存储,这个数组就是arguments;
    		
    		注意点:
    		
    	function getnum(){
    		return 100;
    	}
    	var arr = getnum();//getnum函数运行,并将返回的结果赋值给arr。
    	var arr1 = getnum;//getnum本身是一个函数名,而函数本身在js中就是一个对象,getnum就是这个函数对象的引用。将getnum这个引用的地址赋值给了arr1 这时,arr1也指向了这个函数对象,此时这个函数对象有两个函数对象。
    	alert(arr);//100
    	alert(arr1);//function getnum(){
    	//	return 100;
    //	}
    	var arr = getnum();
    	
    js函数的其它表现形式
    动态函数:使用的是js中内置对象Function
    参数列表和函数列表都是通过字符串指定的。
    	var add = new Function("x,y","var sum;sum = x + y;return sum; ");
    	alert(add(4,8));
    	一般用的不多
    	
    匿名函数:没有名字的函数
    	例如:
    	function(a,b){
    	return a+b
    	}	
    8、数组:对多个数据进行存储,便于操作。就是传说中的容器。
    	数组用于存储更多的数据,是一个容器。
    		特点:
    		a、长度是可变的;
    		b、元素的类型是任意的;
    		建议:在使用数组时,存储同一类型的元素,操作起来方便。
    	js中的数组定义的两种格式:
    	(1)、var arr= [];
    	 (2)、var[] arr = [1,2,4,5,7];
    	 使用了javacriipt中的Array对象来完成定义
    	 	var arr = new Array();//var arr = [];
    	 	var arr1 = new Array(3);//数组定义并且长度为3;
    	 	var arr2 = new Array(3,4,5);//定义一个数组,元素为3,4,5;
    	 
    9、对象:只要是基于对象的语言,或者是面向对象的语言,就存在着对象的概念,对象就是一个封装体。既可以封装数据又可以封装函数。
    	声明一个String对象:
    		var str2 = new String("hello");
    		var str1 = "hello world";
    
    	演示String对象:
    		var str = "abcde";
    		document.write(str.bold());//加粗
    		document.write("<br/>");
    		document.write(str.fontcolor("red"));//字体颜色
    		document.write("<br/>");
    		document.write(str.link("http://www.baidu.com"))//将字符串变成超链接
    		document.write("<br/>");
    		document.write(str.substr(1,3));//bcd
    		document.write("<br/>");
    		document.write(str.substring(1,3));//bc
    	因为js中的string对象方法优先,想要对字符串的操作其它的功能,比如:去除string两端的空格,这时我们只能自定义
    	代码示例:
    	function delect(str){
    		//定义两个变量,一个记录开始的位置,一个记录结束的位置
    		/* 对开始的位置对字符进行判断,如果是空格,就进行递增 ,直到不是空格为止*/
    		/* 对结束的位置对字符进行判断,如果是空格,就进行递减 ,直到不是空格为止*/
    		/* 必须要保证开始<= 结束,这样才可以进行截取 */
    		var start,end;
    		start = 0;
    		end = str.length-1;
    		while(start <= end && str.charAt(start)==" "){
    			start++;
    		}
    		while(start <= end && str.charAt(end)==" "){
    			end--;	
    		}
    		return str.substring(start,end+1);
    	}
    	var a = "     ab    c   ";
    	alert("!"+delect(a)+"!");
    	
    	原型:
    	从上代码分析:既然delcet方法是用来操作字符串的方法,那么我们可以将该方法定义在字符串对象中,直接用字符串对象调用。
    	这里可以使用该字符串的原型属性来完成
    	原型:就是该对象的一个描述。该描述中如果添加了新功能,那么该对象都会具备这些新功能。
    	而prototype就可以获取到这个原型对象,通过prototype就可以对对象的功能进行扩展。
    	String.prototype.delect=function(){
    		var start,end;
    		start = 0;
    		end = this.length-1;
    		while(start <= end && this.charAt(start)==" "){
    			start++;
    		}
    		while(start <= end && this.charAt(end)==" "){
    			end--;	
    		}
    		return this.substring(start,end+1);
    		
    	};
    

    综合练习:

    1、定义功能:完成对数组的最值获取

    2、对数组排序

    3、对数组查找,返回该数组中的index角标

    4、对数组元素进行反转

    	
    	原型练习:
    	1、给字符串添加一个功能,将字符串变成一个字符数组。	2、给字符串添加一个功能,将字符串进行反转。
    
    模拟下join的实现
    		var arr = ["1","2","3"];
    		var arr1 = ["a","b","c"];
    		var newarr = arr.concat("连接上了",arr1);//在arr数组上连接一个元素,再连接一个arr1数组
    		var newarr1 = arr.concat(arr1);//连接两个数组合并为一个数组
    		document.write(newarr);
    		document.write(arr.pop());//删除并返回最后一个元素
    		document.write(arr.reverse());//颠倒数组中元素的顺序。
    		document.write(arr.shift());//删除并返回数组的第一个元素
    		document.write(arr.splice());//删除元素,并向数组添加新元素(替换)。
    		document.write(arr.unshift());//向数组的开头添加一个或更多元素,并返回新的长度。
    	
    		
    这些都是高级程序设计语言具备的共性内容,只不过各种语言对这些内容的表现形式有所不同,但是使用的基本思想是一致的。
    
    
    Date对象
    	var date = new Date();
    	document.write(date);
    	document.write(date.toLocaleString());//根据本地时间格式,把 Date 对象转换为字符串。
    	document.write(date.toLocaleDateString());//根据本地时间格式,把 Date 对象的日期部分转换为字符串。
    
    	//日期对象和毫秒值之间的转换
    	var date1 = new Date();
    	var time = date1.getTime();//获取毫秒值,日期对象转换毫秒值
    	//将毫秒值转换成日期对象
    	var date2 = new Date(time);
    	
    	
    		var datea = "6/20/2017";
    		var time2 = Date.parse(datea);
    		var date3 = new Date(time2);
    
    为了简化对象调用内容的书写
    可以使用js中的特有语句with来完成
    with(对象){
    	在该区域中可以直接食用指定的对象的内容,不需要写对象。
    }
    
    
    Math对象
    	var num1 = Math.ceil("3.14");//返回但雨等于指定参数的最小整数
    	var num2 = Math.floor("3.14");//返回小于等于指定数据的最大整数
    	var num3 = Math.round("3.14");//四舍五入
    	
    Nuber对象
    	 var num6 = paseInt("123dsdsa");
    		//将指定禁止格式的字符串转换为十进制
    		var num = parseInt("110", 2);
    		var num1 = parseInt("0&3c", 16);
    		//将十进制转换成其他进制,使用数字对象来完成
    		var num2 = new Number(6);
    		document.write(num2.toString());//110
    		var num3 = 60;
    		document.write(num3.toString());//3c
    
    

    js中特有的语句

    	for in
    	格式:for(变量in对象)//对对象进行遍历的语句
    		{
    			
    		}
    	
    	js自定义对象
    	如果想哟啊自定义对象,应该先对对象进行描述
    	js是基于对象,不是面相对象的。不具备描述事物的能力
    	按照面相思想的编写js?
    	function Person(){//相当于构造器
    		alert("this id person");
    	}
    	//通过描述进行对象的建立 new
    	var p = new Person();
    	//通过给p对象添加属性,直接使用p.属性名即可
    	p.name="张三";
    	p.age = 25;
    	//入伏哦定义的p对象的属性赋值为一个函数,即是给p对象添加一个方法。
    	p.show = function(){
    	alert(this.name+"showing舞了");
    	}
    	
    	几种写法?
    

    DOM

    DHTML在线参考手册

    用来讲标记性文档封装成对象,并讲标记型文档中的所有标签(标签,文本,属性等)都封装成对象
    封装成对象是为了更方便的操作这些文档,以及文档中的所有内容,因为对象的出现就可以有属性和行为被调用。
    	文档对象模型
    	文档:标记性文档
    	对象:封装了属性和行为的实例,可以被直接调用
    	模型:所有标记型文档都剧本已写共性特征的一个体现
    		标记型文档(标签,属性,标签中封装的数据)
    只要是标记型文档,DOM这种技术都可以对其进行操作
    常见的标记型文档:html   xml
    DOM是如何操作标记型文档的?
    	要操作标记型文档,必须进行解析
    	DOM的解析方式
    		按照标签的层次关系体现出标签的所属,形成一个树状结构,而数中的标签以及文本甚至属性称为节点
    	DOM解析的特点:
    		将标记型文档解析成一个DOM树,并将树中的内容都封装成节点对象。这种DOM解析的方式的好处:可以对树中的节点进行任意操作如:增删改。弊端:这种解析需要把整个标记型文档加载进内存。浪费内存空间且所占内存较大。
    		
    	DOM模型有三种:
    	1、将html文档封装成对象。
    	2、在1的基础上加入了一些新功能,比如解析一些名称空间
    	3、在xml文档封装成了对象
    	
    DHTML:动态的HTML
    	注意:这不是一种语言,是多项技术综合体的简称
    	其中包涵了HTML,CSS,DOM,JavaScript
    	这四个技术在动态html页面效果定义时,都处于什么样的角色呢?负责什么效果?
    	HTML:提供标签,封装数据,目的时便于对该标签中的数据进行操作。
    		简单讲:用标签封装数据
    	css:提供样式属性,对标签中的数据进行样式定义
    		简单讲:对数据进行样式定义
    	DOM:负责将标签型文档以及文档中的所有内容进行解析,并封装成对象,在对象中定义更多的属性和行为,便于对对象的操作
    		简单讲:将文档和标签以及其他内容变成对象
    	JS:负责提供程序设计语言,对页面中的对象进行逻辑操作。
    		简单讲:负责页面的行为定义。就是页面的动态效果	
    BOM:browser object Model 浏览器对象模型
    浏览器对应的对象就是window对象
    	我们可以通过一个点击事件获取window版本信息的例子体验一下
    	
    window 对象
    	演示代码:
    	<script type="text/javascript">
    var tt;
    	function windowdemo2(){
    		/* var a = confirm("你确定点击吗?");
    		alert("a="+a); */
    		
    	/* 	setTimeout("alert('setTimeout三秒后弹出来')", 3000); */
    		tt = setInterval("alert('setInterval三秒出来一次')",3000);
    		
    	}
    	/* 	使用 setInterval 方法取消先前开始的间隔事件。 */
    	function stopsetInterval(){
    		clearInterval(tt);
    	}
    	
    	function windowMove(){
    		moveBy(20, 20);/*	将窗口的位置移动指定 x 和 y 偏移值。  */
    		moveTo(40, 40);/* 将窗口左上角的屏幕位置移动到指定的 x 和 y 位置。 */
    	}
    	
    	function windowopen(){
    		
    		open("", "_blank", "height=200,width=200,status=yes,toolbar=yes,menubar=yes,location=yes");
    	}
    	
    </script>
    
    
    
    <input type="button" value="window事件演示" onclick="windowdemo2()"></input>
    <input type="button" value=" 停止弹" onclick="stopsetInterval()"></input>
    <input type="button" value=" open" onclick="windowopen()"></input>
    
    
    弹窗练习?实现弹窗最小化,都会再弹出来,focus()
    
    location对象
    演示代码:
    	<script type="text/javascript">
    	function windowdemo1(){
    		var name =  location.pathname;
    		var text = location.href;
    		println(name);
    		println(text);
    	}
    	
    	function println(val){
    		document.write(val+"<br/>")
    	}
    </script>
    
    <input type="button" value="按钮事件演示" onclick="windowdemo1()"></input>
    
    
    document对象
    document最常见的操作就是获取页面中的节点
    获取节点的方式:
    1、getElementById	获取对 id 标签属性为指定值的第一个对象的引用。
    2、getElementsByName	根据name可以有多个,所以返回的就是一个数组。
    3、getElementsByTagName	获取基于指定元素名称的对象集合。
    常见的节点有三种:
    a、标签型节点
    b、属性节点
    c、文本节点
    标签型节点是没有值的,属性和文本节点是有值的。
    	var di = document.getElementById("div");//di为标签div的id名
    	alert(di.nodeValue);
    	
    	//获取节点里面的文本
    	var text = di.innerHTMl;
    	alert(text);
    	
    	//改变文本
    	di.innerHTML = "文本内容被改掉";
    	 	
    通过节点的层次关系获取节点对象
    	关系:
    	1、父节点:parcntNode:对应一个节点对象
    	2、子节点:childNode:对应一个节点集合
    	3、兄弟节点
    		上一个兄弟节点:previousSibling
    		下一个兄弟节点:nextSibling
    	尽量少用兄弟节点,会根据浏览器的不同,会解析除标签间的空白文档节点	
    	课堂练习:创建?添加?删除?
    	
    

    jQuery对象与DOM对象

    
    对于才开始接触jQuery库的初学者,我们需要清楚认识一点:
    
    jQuery对象与DOM对象是不一样的
    可能一时半会分不清楚哪些是jQuery对象,哪些是DOM对象,下面重点介绍一下jQuery对象,以及两者相互间的转换。
    
    通过一个简单的例子,简单区分下jQuery对象与DOM对象:
    
    <p id=”imooc”></p>
    我们要获取页面上这个id为imooc的p元素,然后给这个文本节点增加一段文字:“您好!通过慕课网学习jQuery才是最佳的途径”,并且让文字颜色变成红色。
    
    普通处理,通过标准JavaScript处理:
    
    var p = document.getElementById('imooc');
    p.innerHTML = '您好!这是Dom写入';
    p.style.color = 'red';
    通过原生DOM模型提供的document.getElementById(“imooc”) 方法获取的DOM元素就是一个DOM对象,再通过innerHTML与style属性处理文本与颜色。
    
    jQuery的处理:
    
    var $p = $('#imooc');
    $p.html('您好!这是jQquery写入').css('color','red');
    通过$('#imooc')方法会得到一个$p的jQuery对象,$p是一个类数组对象。这个对象里面包含了DOM对象的信息,然后封装了很多操作方法,调用自己的方法html与css,得到的效果与标准的JavaScript处理结果是一致的。
    
    通过标准的JavaScript操作DOM与jQuyer操作DOM的对比,我们不难发现:
    
    通过jQuery方法包装后的对象,是一个类数组对象。它与DOM对象完全不同,唯一相似的是它们都能操作DOM。
    通过jQuery处理DOM的操作,可以让开发者更专注业务逻辑的开发,而不需要我们具体知道哪个DOM节点有那些方法,也不需要关心不同浏览器的兼容性问题,我们通过jQuery提供的API进行开发,代码也会更加精短。
    
    
    
    jQuery对象转化成DOM对象
        jQuery库本质上还是JavaScript代码,它只是对JavaScript语言进行包装处理,为的是提供更好更方便快捷的DOM处理与开发中经常使用的功能。我们使用jQuery的同时也能混合JavaScript原生代码一起使用。在很多场景中,我们需要jQuery与DOM能够相互的转换,它们都是可以操作的DOM元素,jQuery是一个类数组对象,而DOM对象就是一个单独的DOM元素。
    
    如何把jQuery对象转成DOM对象?
    
    利用数组下标的方式读取到jQuery中的DOM对象
    
    HTML代码
    
    <div>元素一</div>
    <div>元素二</div>
    <div>元素三</div>
    JavaScript代码
    
    var $div = $('div') //jQuery对象
    var div = $div[0] //转化成DOM对象
    div.style.color = 'red' //操作dom对象的属性
    用jQuery找到所有的div元素(3个),因为jQuery对象也是一个数组结构,可以通过数组下标索引找到第一个div元素,通过返回的div对象,调用它的style属性修改第一个div元素的颜色。这里需要注意的一点是,数组的索引是从0开始的,也就是第一个元素下标是0
    
    通过jQuery自带的get()方法
    
    jQuery对象自身提供一个.get() 方法允许我们直接访问jQuery对象中相关的DOM节点,get方法中提供一个元素的索引:
    
    var $div = $('div') //jQuery对象
    var div = $div.get(0) //通过get方法,转化成DOM对象
    div.style.color = 'red' //操作dom对象的属性
    
    
    DOM对象转化成jQuery对象
    相比较jQuery转化成DOM,开发中更多的情况是把一个dom对象加工成jQuery对象。$(参数)是一个多功能的方法,通过传递不同的参数而产生不同的作用。
    
    如果传递给$(DOM)函数的参数是一个DOM对象,jQuery方法会把这个DOM对象给包装成一个新的jQuery对象
    通过$(dom)方法将普通的dom对象加工成jQuery对象之后,我们就可以调用jQuery的方法了
    
    HTML代码
    
    <div>元素一</div>
    <div>元素二</div>
    <div>元素三</div>
    JavaScript代码
    
    var div = document.getElementsByTagName('div'); //dom对象
    var $div = $(div); //jQuery对象
    var $first = $div.first(); //找到第一个div元素
    $first.css('color', 'red'); //给第一个元素设置颜色
    通过getElementsByTagName获取到所有div节点的元素,结果是一个dom合集对象,不过这个对象是一个数组合集(3个div元素)。通过$(div)方法转化成jQuery对象,通过调用jQuery对象中的first与css方法查找第一个元素并且改变其颜色。
    
    
    
    jQuery选择器之层级选择器
    文档中的所有的节点之间都是有这样或者那样的关系。我们可以把节点之间的关系可以用传统的家族关系来描述,可以把文档树当作一个家谱,那么节点与节点直接就会存在父子,兄弟,祖孙的关系了。
    
    选择器中的层级选择器就是用来处理这种关系
    
    子元素 后代元素 兄弟元素 相邻元素
    通过一个列表,对比层级选择器的区别
    
    
    
     仔细观察层级选择器之间还是有很多相似与不同点
    
    层级选择器都有一个参考节点
    后代选择器包含子选择器的选择的内容
    一般兄弟选择器包含相邻兄弟选择的内容
    相邻兄弟选择器和一般兄弟选择器所选择到的元素,必须在同一个父元素下
    
    
  • 相关阅读:
    sublime text 前端插件安装
    echarts常用的配置项
    2018年okr
    charlse配置
    运维笔记
    移动端开发兼容问题全记录
    centos6下python开发环境搭建
    centos安装python2.7
    centos6安装MariaDB
    pzea上centos6安装mysql57
  • 原文地址:https://www.cnblogs.com/chendujie/p/6966082.html
Copyright © 2011-2022 走看看