xhl jquery

68 阅读6分钟

数据格式:

1、XML格式:
1、面试题:HTML、XHTML、DHTML、XML分别是什么?
	HTML - 网页
	XHTML - 更严格的网页
	DHTML - 动态的网页:并不是新技术、也不是新概念,只是现有技术的整合统称,可以让我们的网页在离线版也具有动态效果
			DHTML = HTML + CSS + JS 
	XML - 配置文件|数据格式:淘汰了,现在最流行的数据格式:JSON - javascript Object notation

2、如何使用XML:
	1、创建文件xx.xml
	2、声明文档:<?xml version='1.0' encoding='utf-8'?>
		version - 版本:1.0 和 1.1,但是只有人使用1.0,1.1版本无人使用(垃圾),以后也不用在学习了,不会再有新版本:淘汰了
		encoding - 编码格式:在中国编码始终utf-8
		必须出现在第1行第1列
	3、必须写上一个根标签:而且这个根标签只能有一个(双标签),没有任何的预定义标签的,所有的都需要你自定义
	4、里面,你随意,想放什么标签就放什么标签
	5、恭喜你学完了
	6、打开必须用服务器端方式打开

	前端:依然使用ajax去获取xml
		1、url - "xx.xml";
		2、xhr.responseXML; - 获取到的xml文件,可以使用核心DOM进行解析处理拿到你想要的部分
							核心DOM:无敌的,既可以操作HTML又可以操作XML,只不过API比较繁琐

	开发中:正常来说后端会想办法将数据库的数据整理为一个XML格式 - 但是现在绝对不可能遇到了(淘汰了)

	被淘汰的原因:解析数据非常恶心,核心DOM的语法本来就又臭又长

2、JSON格式:JavaScript Object Notation:js对象表示法,本身就是js的一部分 - JSON字符串 作用:类似于XML - 数据格式 好处:比XML 更快、更简洁、更容易解析 - 一个优秀的数据格式:能极大的提成我们程序员的开发效率

1、认识一下哪些属于JSON字符串:后端把数据库的数据取出来整理为一个JSON字符串
	1'[1,2,3,4,5]';
	2'{"key":value}';
	3'[{},{},{},{}]';
	4'{"names":[],"ages":[],"salaries":[]}';

2PHP如何将数据变为JSON字符串 - 穿衣服
	echo JSON_encode($arr); - PHP的方法
	JSON.stringify(data); - Node.js方法:历史上第一次出现一门语言可以通吃前后端

3、前端依然使用ajax获取数据:
	xhr.responseText;//json字符串JSON字符串转为一个JSON对象 - 脱衣服:2var json对象=eval("("+json字符串+")");
	       *var json对象=JSON.parse(json字符串);
                   
、展望:jQuery框架 + Bootstrap组件库 + Node.js + 小东西(gulp/git/svn) - 除了Node.js其余东西都非常的简单,量比较大

要求:1、习惯使用帮助文档|百度 - 能不记就不记忆 2、代码速度要提升了,多背单词 - 每分钟200下键盘

2、jQuery框架概念: jQuery类库其实就是一个.js文件 在三大框架(vue(中国人自己搞得一个框架)、react、angular)出现之前,曾经全球最火的 在三大框架(vue(中国人自己搞得一个框架)、react、angular)出现之前,曾经全球第二火的:prototype.js ...多不胜数,15年的时候代老湿统计过一次,8000+类库,导致了一个问题,永远学不完,所以我们以某个一个库为例,学习类库的特点(简化JS - 尤其简化DOM操作)

3、jQuery类库:有10000多行代码,为我们带来了一个叫做jQuery对象(属性和方法) 版本:1.xx - 兼容老IE的同时,还做了向上兼容(新版本带来的API - 1.xx也可以使用) 2.xx - 2开始就不再支持老IE了 3.xx 目的:方便程序员开发js,简化js(1、简化核心DOM操作 2、简化了绑定事件 3、简化了ajax - 没有简化ES、BOM 4、带来了新功能)

4、面试题:为什么有的人称呼jQuery叫做框架,又有的人称呼jQuery叫做类库? 因为大部分人不知道jQuery其实是由4部分组成的: *1、jQuery.js - 专门简化js开发的,大部分人也只知道它 *2、jQuery.ui.js - 专门针对UI开发 - 哪怕没有设计师,我们做出的网页也不至于太丑(HTML/CSS/JS) - 太老了样式太丑了 3、jQuery.mobile.js - 专门针对移动端开发的,现在有更棒的混合开发框架:uniapp 4、Qunit - 专门给测试人员(英文好)用于测试js代码的软件

今日目标:简化DOM

5、如何使用jQuery: 1、固定步骤: 1、在HTML页面引入jQuery.js文件 2、*使用jQuery提供的选择器去获取元素 3、*使用jQuery提供的API去操作元素

2、jQuery提供了一个工厂函数(很重要的,可以干很多事情/操作的一个函数)
	语法:*$() 或 jQuery();
	*作用:
		1、查找元素:$("jQuery选择器") - 支持一切的css选择器,但是在css选择器的基础上还加上了更多的选择器,所以叫jQuery选择器
			千万不要记忆:习惯使用帮助文档:https://www.w3school.com.cn/jquery/jquery_ref_selectors.asp
			注意:1、封装底层代码:document.querySelectorAll(),只不过提供的更加的丰富
			      2、*找到的元素已经不再是DOM集合/对象,应该叫做jQuery集合/对象

		2、转换:
		   问题:jQuery和DOM对象只能使用自己的方法,不能使用别人的方法
			1JQ -> DOM:绝对不用,不会把简单变成复杂的,也千万不要对jq集合进行for循环
				$("xx")[下标]

			2、*DOM -> JQ:有用,this,【target】->自动出来是一个DOM对象,用不了JQAPI
				$(DOM对象) 


3、jQuery的特性:
	1、隐式迭代 - 不用/千万不要去循环遍历,自带循环功能,千万不要加下标
	2、链式操作 - 找到一个元素后可以不断的连续的.操作它

6、通过 关系 找到元素:前提:至少要找到一个元素才能使用关系 父:("xx").parent();子:("xx").parent(); 子:("xx").children(); 前一个兄弟:("xx").prev();后一个兄弟:("xx").prev(); 后一个兄弟:("xx").next(); *其他兄弟:$("xx").siblings(); - 除了自己以外的其他兄弟,原生javascript没有的操作


7、操作元素 *内容: *1、("xx").html()类似于原生JSinnerHTML,可以识别标签获取:("xx").html() - 类似于原生JS中innerHTML,可以识别标签 获取:("xx").html(); 设置:$("xx").html("新内容");

	2、$("xx").text() - 类似于原生JS中innerText,不可以识别标签
		获取:$("xx").text();
		设置:$("xx").text("新文本");

	*3、$("xx").val() - 类似于原生JS中value,单独为input准备
		获取:$("xx").val();
		设置:$("xx").val("新值");

*属性:
	$("xx").attr(); - 类似于原生JS中getAttribute/setAttribute,也可以操作自定义属性
		获取:$("xx").attr("属性名");
		设置:$("xx").attr("属性名","属性值");
		删除:$("xx").removeAttr("属性名");

*样式:
	1、jQuery新提供的可以单独操作class属性来控制样式:
		追加class:$("xx").addClass("新class");//追加并不是替换
		删除class:$("xx").removeClass();//特殊:不传参数,删全部
							 传入参数,删指定
		切换class:$("xx").toggleClass("d2");//在有d2和没有d2之间进行切换

	2、直接操作样式:
		获取:$("xx").css("属性名");//牛逼:不管你是内联还是内部还是外部样式表,只获取到当前生效的样式
		设置:$("xx").css({//设置的依然是内联样式,一次可以修改多个样式
				"属性名":"属性值",
				...
		      });

8、*创建元素并且渲染页面 创建元素:工厂函数的第三个功能: var 新元素=(<标签名class=(`<标签名 class='{变量}'>${内容}</标签名>`);

上树:4种
       *$("父元素").append(新元素);//当儿子,最后一个儿子
	$("父元素").prepend(新元素);//当儿子,第一个儿子
	$("兄弟").before(新元素);//当兄弟,上一个
	$("兄弟").after(新元素);//当兄弟,下一个

如果你希望创建元素后立刻上树:
	$("父元素").append($(`<标签名 class='${变量}'>${内容}</标签名>`))

9、*删除元素:$("xx").remove();

10、克隆元素:就是复制元素,看似很屌,实则没用 - 垃圾 $("xx").clone();

今天学完了:DOM操作

总结:工厂函数:目前一共可以做3个功能:
	1、查找元素:$("选择器");
	2DOM->JQ:$(DOM对象);
	3、创建元素:$("<><>");

	底层原理:重载:arguments,通过判断我们传入的实参的不同执行不同的操作	
            
1、JQ事件:
绑定事件:$("xx").事件名(callback) - 里面支持e

1、回忆目前我们学过的事件有哪些?
   click/dblclick/change/mouseover|mouseenter(没有冒泡)/mouseout|mouseleave(没有冒泡)/mousemove/load/focus/blur/input/submit/resize/mousedown/mouseup/readystatechange/keydown

2、面试题:原生JS中window.onload事件 和 JQ提供的$(document).ready(callback) 有什么区别?
	1、window.onload:需要等待所有的资源(HTML、CSS、JS、图片、视频、音频)加载完毕才会执行,执行效率可以说是最低最后,一个页面只能使用一次
	2、$(document).ready(callback):仅仅只会等待HTML加载完毕就执行,效率较高,而且一个页面可以使用多个
		简写:1、$(document).ready(callback)
		      2、$().ready(callback)
		      3、$(callback) - 工厂函数的第4个功能

3、新事件:
	1、*****滚动监听事件:
		作用:
		  1、做出更多的特效
		  2、滚动监听+ajax:滚动加载新内容(等我们搭配上jQuery版本的ajax在学习)

		语法:
			$(window/document).scroll(()=>{
				1、获取滚动条当前的位置
					$(window).scrollTop()

				2、获取xx在什么位置:只管你距离页面顶部/左边有多远
					$("xx").offset().top/left;
			})

2、JQ动画:JQ提供了预定义动画和自定义动画 - JS没有的 1、预定义动画:3组9个API 1、隐藏和显示: 隐藏:("xx").hide(time,callback)显示:("xx").hide(time,callback) 显示:("xx").show(time,callback) 特殊:1、如果没有传递任何(time)实参时,是不具有动画的,瞬间显示和瞬间隐藏,以后就不要自己再写display:none/block; 2、如果传递了实参(time),具有动画:同时修改宽度高度和透明度 3、回调函数:动画执行完毕后才会执行的操作 - 以后你的动画完毕后想要干什么就必须放到这个回调函数里面 4、如果你希望一会儿显示,一会儿隐藏,没有必要自己写if判断:$("xx").toggle(time,callback)===show+hide;

	2、滑动效果(卷帘门)
		隐藏:$("xx").slideUp(time,callback)
		显示:$("xx").slideDown(time,callback)
		特殊:1、如果没有传递任何(time)实参时,也具有动画的,只不过速度很快
		      2、如果传递了实参(time),具有动画:同时修改高度
		      3、回调函数:动画执行完毕后才会执行的操作 - 以后你的动画完毕后想要干什么就必须放到这个回调函数里面
		      4、如果你希望一会儿显示,一会儿隐藏,没有必要自己写if判断:$("xx").slideToggle(time,callback)

	3、淡入淡出:
		隐藏:$("xx").fadeOut(time,callback)
		显示:$("xx").fadeIn(time,callback)
		特殊:1、如果没有传递任何(time)实参时,也具有动画的,只不过速度很快
		      2、如果传递了实参(time),具有动画:同时修改透明度
		      3、回调函数:动画执行完毕后才会执行的操作 - 以后你的动画完毕后想要干什么就必须放到这个回调函数里面
		      4、如果你希望一会儿显示,一会儿隐藏,没有必要自己写if判断:$("xx").fadeToggle(time,callback)

2、自定义动画:
	1、并发动画:所有的操作一起执行
		$("xx").animate({
			"css属性名":"css属性值",
			...
		},time,callback)

	2、排队动画
		$("xx").animate({
			"css属性名":"css属性值",
		},time,callback).animate({
			"css属性名":"css属性值",
		},time,callback).animate({
			"css属性名":"css属性值",
		},time,callback).animate({
			"css属性名":"css属性值",
		},time,callback)

	特殊:1、animate不支持颜色相关的和transform转换相关的操作,解决:
			1、不用animate,用css代替,但是你就失去了回调函数
			2、等我们明天学习了jQueryUI,jQueryUI对animate进行了增强操作
	      2、只要是动画就一定会有排队的可能,有的情况要记得停止动画:
			$("xx").stop().animate()
                            
1、jQueryUI:基于Jquery的开源网页用户界面代码库 - 提供了HTML、CSS、JS的一个插件库(放着很多很多的插件)
组件库:组件:组成网站一部分的部件,代码重用,一般不具备js的
插件库:跟组件差不多,但是带有js效果的

如何使用jQueryUI:
	1、下载jQueryUI - 不需要你做
	2、在页面上引入:- js的引入顺序千万不能乱,因为jQueryUI是基于jQuery的
		<link rel="stylesheet" type="text/css" href="jquery-ui-1.13.0.custom/jquery-ui.css"/>
		<script src="jquery-ui-1.13.0.custom/external/jquery/jquery.js" type="text/javascript" charset="utf-8"></script>
		<script src="jquery-ui-1.13.0.custom/jquery-ui.js" type="text/javascript" charset="utf-8"></script>
	3、官方文档的demo中挑选你需要的/喜欢的插件,直接梭到你的项目中
	4、根据UI提供的给你的设计图,修改样式 - 如果你修改不成功,只有一个可能:权重不够
	5、利用ajax去获取数据库中的数据,来进行数据渲染
	6、千万别忘了调用jQueryUI提供的xx方法实现效果

	个人比较推荐的JQUI的插件:
		1、选项卡/标签页/tabs
		2、菜单/menus
		3、手风琴/折叠面板
		4、自动完成/模糊查询
		5、特效进行了增强:toggle("特效名称",time,callback)===show+hide加强了
		6、增强了animate:现在支持颜色操作了,但是依然不支持transform转换
		7、交互留给你们自己尝试

2、日期选择器:layDate.js - 简单,漂亮,但是已经下架了,原属于layUI.js,由于白嫖过多,赞助太少,下架了 学会看文档

3、万能的插件库: 1、jQuery插件库 - 无敌了,任何特效都能找到,但是要收费(每天一个账号可以白嫖2次) 2、jQuery之家 - 就是jQuery插件库的另一个网站,是免费的,而且不需要登录账号