Ajax

ajax基础知识

*定义:封装javascript,提供了很多API,是一个基于JavaScript开发的库
*优点:1.体积小,运行率高 2.支持css3选择器 3.跨浏览器兼容好
*目的:写得少,做的多,开发效率高
*使用:

一、下载

1.直接下载文档到本地(目前推荐)
版本:1.x的版本支持IE6.7.8 浏览器兼容较好
3.x的版本不支持IE低版本浏览器
 
压缩版本与未压缩版本 :压缩后体积较小看不到源码,开发中使用未压缩的,有利于我们查看代码
2.CDN加速(受网络和服务器影响)
3.通过npm安装
 

二、引入

script标签引入
 
*$(document).ready():入口函数,所有代码都要写在入口函数里;
$是jQuery的简称
 
*入口函数的几种写法
$(document).ready()
$(function(){})
iQuery(document).ready()
jQuery(function(){})
 
*$()里面可以写什么:
1.入口函数
2.dom字符串
3.dom对象
 

*window.onload入口函数和 $(document).ready入口函数的区别

1.window.onload是等DOM以及所有资源(图片,音乐,js文件等)加载完毕后执行
$(document).ready()等待dom解析完以后执行,不包括图片及其他资源
2.window.onload写多个时,只会执行最后一个
$(document).ready可以写多个,都会执行
 
 

选择器

*选择器

$('div') :选择标签为div的元素
$('#box') :选择ID为box的元素
$('.box') :选择类名为box的元素
$('*') :选择全部
$('.box span') :后代
$("div>p") :子元素
$("div+p") :相邻的p元素
 

*内容选择器

contains(text) :选择包含指定文本的元素 text:参数,文本内容
empty :选择空的元素,空指的是没有元素节点和文本节点
has(selector) :选择指定元素的标签/元素,操作的都是父元素
parent :选择有子元素或者文本的父级元素(除了空的)
 

*基本选择器

$("div:first") :获取第一个元素
$("div:last") :获取最后一个元素
$("div:even") :获取所有索引值为偶数的元素,从 0 开始计数
$("div:odd") :获取所有索引值为奇数的元素,从 0 开始计数
$("div:gt()") :获取到大于给定索引值的元素
$("div:lt()") : 获取到小于给定索引值的元素
$("div:not()") :不能筛选子元素,筛选的是元素本身
$("div").eq() :获取一个给定索引值的元素,从0开始
 

*属性选择器

$("input[type == button]")
$("input[type == text]")
$("input[type="text"]"):找到以text元素
$("input[type*="text"]")       
$("input[type^="text"]")  
$("input[type$="text"]")
 

*子元素

:first-child:所给选择器( :之前的选择器)的第一个子元素
:last-child:表示匹配最后一个子元素
$('div span:nth-child(2)'):其父元素下的第N个子或奇偶元素,从1开始
 
:last与:last-child的区别
:last 表示匹配最后一个元素
:last-child 表示匹配最后一个子元素
 

*表单属性

:checked:匹配所有被选中元素(复选框、单选框等,select中的option)
:selected:匹配所有选中的option元素
 

*添加样式

1.选择器.css('样式名') --- 获取样式
2.选择器.css('样式名','值') ---- 添加一个样式
3.选择器.css({ker1:value1,key2:value2,....keyN:valueN}) --- 添加多个样式 键值对
 
$('button').on('click',function(){ $('div').css({//设置多个样式 'width':'200px', 'height':'300px', 'background':'blue', }) })
 

*解决$冲突问题:jQuery.noConflict()

var a = jQuery.noConflict() a('div').css('color','red')
 

*方法:

1.静态方法:自身方法

function Person(){} Person.showtime = function(){ alert('静态方法') } Person.showtime();
 

2.实例方法:构造函数原型的方法

用构造函数模拟类
function Person(){} Person.prototype.showAge = function(){ alert('实例方法') } var p1 = new Person(); p1.showAge();
 
trim():去掉字符串的首尾空格
var str = ' 骑上我心爱的小摩托 '; console.log(str); console.log($.trim(str));
 
 
each():遍历数组、伪数组、对象
 var arr = ['apple','orange','banana'];
var obj = { 0:'a', 1:'p', 2:'p', 3:'l', 4:'e', }
var person = { name : 'dasha', age:20, }
arr.forEach(function(item,index){ console.log(index,item) })
obj.forEach(function(item,index){ console.log(index,item) })
person.forEach(function(item,index){ console.log(index,item) })
$.each(arr,function(a,b){ console.log(a,b) })
$.each(obj,function(a,b){ console.log(a,b) })
$.each(person,function(key,value){ console.log(key,value) })

 

对比:js中的foreach不能遍历伪数组和对象,jQuery中的each可以遍历伪数组和对象
 
get([index]):取得其中一个匹配的元素,从0开始,返回DOM对象
 
addBack:把当前事件发生的对象也添加到队列里
 

CSS

*操作尺寸

width():获取的是内容的宽度,不包括padding+border
height():获取的是内容的高度,不包括padding+border
innerWidth():内容宽度+padding大小
innerHeight():内容高度+padding大小
outerWidth():内容宽度+padding大小+border
outerHeight():内容高度+padding大小+border
//获取宽度 $('.box').width() //设置宽度,px可写可不写 $('.box').width("200") //获取高度 $('.box').height() //设置高度,px可写可不写 $('.box').height("200")
 

*操作位置

offset
距离屏幕左边的宽度:元素.offset().left()
$('.son').offset().left()
距离屏幕上边的高度:元素.offset().top()
$('.son').offset().top()
 
scroll
scrollTop:滚动条距离上边的滚动距离
//设置 $('.box').scrollTop(200) //获取 $('.box').scrollTop()
scrollLeft:滚动条距离左边的滚动距离
//设置 $('.box').scrollLeft(200) //获取 $('.box').scrollLeft()
 
position:距离定位父级的距离,如果没有定位父级,那么参考的是浏览器
$('.son').position() $('.son').position().left()
 
给浏览器获取滚动距离,设置滚动距离
$(window) $(document)都不能加引号
$(window).on('scroll',function(){ console.log($(document).scrollTop()) })
 
 

属性

设置属性

jQ:attr ----- js:setAttribute

设置属性:元素.attr('属性名','属性值')
注意:设置所有匹配到属性的元素
 
获取属性:元素.attr('属性名')
注意:获取到第一个属性的元素
 
移除属性: removeAttr("属性名")
 

jQ:prop

设置属性:元素.prop('属性名','属性值')
注意同attr
 
获取属性:元素.prop('属性名')
注意同attr
 
移除属性:removeProp("属性名")
 
如果设置相同属性会被覆盖
给某个属性设置多个属性值,用空格隔开
 
如果是checked disable selected针对这些属性,我们选择prop,其余都选择attr
 

*操作class

addClass('名称'):添加类名
removeClass('名称'):移除类名
hasClass('名称'):判断类名是否存在,返回布尔值
toggleClass('名称'):切换类名(添加与删除)
 

HTML代码/文本/值

.val():用于获取表单元素的值
value,不接收任何参数
.text()
html和text的区别:html可以解析元素,而text不能解析元素,会把元素当作字符串输出到浏览器上
console.log($('div').html()) // 获取文本内容 console.log($('div').html('<p>马上就周五了!!!</p>')) //修改文本内容 console.log($('div').text());//获取文本 console.log($('div').text('<p>123654789</p>'));//设置文本
 
change():当元素的值发生改变时,会发生 change 事件,仅适用于文本域(text field),以及 textarea 和 select 元素
当用于 select 元素时,change 事件会在选择某个选项时发生。
当用于 text field 或 text area 时,该事件会在元素失去焦点时发生。
 

文档处理

*内部与外部插入

内部插入

append():添加到元素内部的尾部
appendTo():将...添加到元素内部的尾部
A是爸爸B是儿子
A.append(B)
B.appendTo(A)
 
prepend():添加到元素内部的最前面
prependTo():将...添加到元素内部的最前面
A是爸爸B是儿子
A.prepend(B)
B.prependTo(A)
 

外部插入

after():后面插入一个文本
A.after(B) 向A元素后面添加内容B
 
before()
A.before(B) 向A元素前面添加内容B
 
insertAfter():把A剪切到B的后面(B在前A在后)
A.insertAfter(B) A,B都是DOM元素
 
insertBefore():把A剪切到B的前面(A在前B在后)
A.insertBefore(B) A,B都是DOM元素
 
 
 

*删除

empty(): 移除子节点,不移除本身
删除元素的所有节点,文本节点,元素节点,空节点,注释节点
 
remove([expr]):若不传参,移除本身及所有子节点
若传参,传入选择器,移除指定元素
 
detach([expr]):参数是选择器,效果同remove
但是有区别:
用remove方法移除的元素,该元素上的属性及事件也会被删除
而用detach方法移除的元素,该元素上的属性或者事件会保留
 
 

链式调用

原理:对象调用方法,返回的还是这个对象
$("div").css({ "width":"100px", "height":"100px", "background":"red", }).html("我是div").click(function(){ alert(1) })
 

效果

参数根据需求添加,也可以不添加
参数:
speed:速度 有两种表示方法:1.slow,normal,fast(用字符串)
2.用毫秒表示
ease:运动形式 默认swing,可写linear(匀速)
fn:运动完成后执行的函数

*普通

show('speed','ease',fn):让css属性的display属性为none的元素或状态为hide()时的元素显示出来
hide('speed','ease',fn):让css属性的display属性为block的元素或状态为show()时的元素隐藏出来
toggle('speed','ease',fn)
 

*滑动

slideDown('speed','ease',fn):向下卷曲
slideUp('speed','ease',fn):向上卷曲
slideToggle('speed','ease',fn):切换
 

*淡入淡出

控制元素的透明度,来控制元素淡入淡出的效果
fadeIn('speed','ease',fn):淡入
fadeOut('speed','ease',fn):淡出
fadeTo('speed','opacity','ease',fn):指定透明度的大小
fadeToggle('speed','ease',fn):切换
 

*自定义动画

animate():animate({},'speed','ease',fn)4个参数
1.{}里面写运动变化的属性样式 复合样式要用驼峰命名 比如margin-top ---> marginTop
注意:带数值的样式可以创建动画,字符串样式不可以创建动画比如'background:red',并且大括号里的样式是同时进行的
2.speed 速度
3.ease 运动形式
4.fn 运动完成执行的函数
 
stop(cleanQuene,jumpToEnd):停止运动效果
参数:
  1.cleanQuene 布尔值 true:结束当前动画
  2.jumpToEnd 布尔值 true:跳到动画队列的结尾
 
delay(毫秒数):延迟运动结果
 
 

事件

*JQ相关事件

1.元素.事件名称

$('div').click()
编码效率高,有提示
事件类型有限制
同一个元素绑定多个事件同时会触发
 

2.元素.on(" ",function(){})

$('div').on('click',fn )
编码效率低,无提示
事件类型无限制,只要js中存在的事件都可以写
同一个元素绑定多个事件同时会触发
 

3.移除事件

元素.off()
三个参数,事件名称,选择器,fn
不传参:移除所有事件
传一个参数:移除一个事件
传两个参数:移除指定元素的某一个事件
 

4.单独触发一次事件

元素.one('事件名',fn)事件只触发一次,触发完就销毁
 
 
用户体验好:
mouseenter([[data],fn]):鼠标移入
mouseleave([[data],fn]):鼠标移开
 
用户体验不好:
mouseover([[data],fn]):鼠标移入
mouseout([[data],fn]):鼠标移开
 
hover(fn,fn):
fn1:表示鼠标移入执行的函数
fn2:表示鼠标移开执行的函数
 
 

筛选

查找
parent():查找直接父级
parents():查找直接父级及以上
children():查找元素的子节点(直接的子节点),只考虑子元素不考虑后代元素
不传参:所有的子元素
传参:找指定的子元素
find():可以找任意子元素
必须传参:参数是选择器
next():寻找指定元素的下一个同级元素
nextAll():寻找指定元素后面的所有同级元素
可以传参,参数是可以获取到的参数
prev():寻找指定元素的上一个同级元素
prevAll():寻找指定元素前面的所有同级元素
siblings():查找所有兄弟节点
 
 
 

jQ取消冒泡:

1.return false
2.event.stopPropagation()
 

jQ取消默认事件:

1.return false
2.event.preventDefault()
 

jQ事件委托: 用于给动态添加的元素绑定事件

通俗的讲 某件事自己不去亲自完成,而是让别人代替你完成并且把完成结果返回给你
可以解决后面创建元素的问题
 
delegate('目标元素','事件类型',fn) 目前被废弃
on('事件类型','目标元素',fn)
 

事件冒泡:

捕获阶段:事件从window到目标元素之前触发的事件这个阶段叫事件捕获
冒泡阶段:当事件到达目标元素,会按照捕获阶段的路线反向触发事件
 
 
 

异常捕获机制

try...catch
先尝试执行try里面的的代码,如果try中代码有问题,那么会执行catch里面的代码,并且try中代码问题原因可以在catch中捕获到
如果try中代码没问题,那么catch中代码不会执行,try...catch外部的代码不会影响执行
 
 

XML

xml:类似于html,扩展标记语言,html是显示文本或者数据,而xml是传输数据的
语法规则:
1.必须有一个根元素
2.没有规定的元素供使用,元素都是自定义的
3.对大小写敏感
4.标签都是闭合的,没有单标签
5.标签必须合理嵌套,不能错位嵌套
6.元素命名区分大小写,不能使用数字,特殊符号开头
 
 

jsonp

jsonp:做跨域请求的技术,由于浏览器的同源策略,ajax请求被这种策略限制,
对于非同源的请求ajax无法实现,jsonp可以解决跨域问题
 
同源策略:是浏览器的安全机制,防止其他网站攻击导致信息泄露,或者向其他网站请求资源,导致自己的信息泄露
 

*什么叫同源:

协议,域名,端口号必须完全相同,三者中有一个不同就是非同源
http://www.baidu.com 和 https://www.abc.com 非同源,协议不同 https:加密
http://www.baidu.com 和 http://www.NEF.com 非同源,域名不同
http://www.baidu.com:80 和 http://www.NEF.com:8000 非同源,端口不同
http://www.baidu.com:80 和 http://www.baidu.com:80?numm = 1 同源
 

*什么是跨域? 非同源即跨域

*json与jsonp的关系:没关系
jsonp:json with padding :把数据内容填充到函数调用中
 
*script,img,link的src与href属性没有同源策略的限制
 

*jsonp的原理:

1.动态创建script标签,利用script标签的src属性没有同源策略的限制,向请求地址发送一个get请求;
2.预先定义一个函数,这个函数的作用是用来接收返回的数据,并且要把这个函数名通过url携带参数的方式发送给服务器;
3.服务器拿到函数名以后,这个函数名包裹着服务器返回的数据,也就是服务器返回的是函数的调用.
 

*jquery中使用jsonp的方式:

      1.jsonp:可以指定参数名,不写的话默认callback
      2.jsonpCallback:指定函数名
      3.dataType:"jsonp":告知服务器返回的数据格式
 
js对象和jQuery对象相互转换的方法
 
oBox.html("hello")这么写会报错的原因:
    oBox是DOM对象 js对象不能使用jQuery对象的方法,jQuery对象也不能使用DOM对象的方法
    可以共存,但不可以混用
    例如:
    innerHTML js中的方法
    html() jquery对象中的方法
    setAttribute js中设置属性的方法
    attr("name")  jquery中设置属性的方法
    value js中设置值得方法
    val() jQuery中设置值得方法
 
js对象和jquery对象相互转换的方法?
    1.js对象转成jQuery对象的方法?
        把js对象使用$()包裹起来
    2.jQuery对象转成js对象?[index] get(index)
        2.1.使用中括号[0]
        2.2.使用get(0)

posted @ 2020-12-16 15:23  董珊珊  阅读(22)  评论(0)    收藏  举报