当前位置: 首页 > news >正文

JQuery

1.jquery介绍

jQuery是目前使用最广泛的javascript函数库。据统计,全世界排名前100万的网站,有46%使用jQuery,远远超过其他库。微软公司甚至把jQuery作为他们的官方库。

jQuery的版本分为1.x系列和2.x、3.x系列,1.x系列兼容低版本的浏览器,2.x、3.x系列放弃支持低版本浏览器,目前使用最多的是1.x系列的。

jquery是一个函数库,一个js文件,页面用script标签引入这个js文件就可以使用。

<script type="text/javascript" src="js/jquery-1.12.2.js"></script>

jquery的口号和愿望 Write Less, Do More(写得少,做得多)

1、jQuery 官方网站
2、jQuery CDN 版本下载

2.jquery加载

将获取元素的语句写到页面头部,会因为元素还没有加载而出错,jquery提供了ready方法解决这个问题,它的速度比原生的 window.onload 更快。

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><script type="text/javascript" src="./js/jquery-1.12.4.min.js"></script><script type="text/javascript">window.onload=function(){var odiv=document.getElementById('div1');alert('原生弹出的'+odiv);}// ready 比window.onload要快:// 原因四,window.onload是等标签加载完后,再渲染zhi后运行,ready是等标签加载完后就运行// ready的完整写法:$(document).ready(function(){var div=$('#div1');alert('jquery弹出的'+div);})// read的简写$(function(){var div=$('#div1')alert('jquery弹出的'+div);})</script><body><div id="div1">这是一个div元素</div></body>
</html>

3.jquery选择器

3.1 jquery用法思想一

选择某个网页元素,然后对它进行某种操作
 

3.2 jquery选择器

jquery选择器可以快速地选择元素,选择规则和css样式相同,使用length属性判断是否选择成功。

$('#myId') //选择id为myId的网页元素
$('.myClass') // 选择class为myClass的元素
$('li') //选择所有的li元素
$('#ul1 li span') //选择id为为ul1元素下的所有li下的span元素
$('input[name=first]') // 选择name属性等于first的input元素

3.3 对选择集进行过滤

$('div').has('p'); // 选择包含p元素的div元素
$('div').not('.myClass'); //选择class不等于myClass的div元素
$('div').filter('.myClass'); //选择class等于myClass的div元素
$('div').eq(5); //选择第6个div元素

3.4 选择集转移

$('div').prev(); //选择div元素前面紧挨的同辈元素
$('div').prevAll(); //选择div元素之前所有的同辈元素
$('div').next(); //选择div元素后面紧挨的同辈元素
$('div').nextAll(); //选择div元素后面所有的同辈元素
$('div').parent(); //选择div的父元素
$('div').children(); //选择div的所有子元素
$('div').siblings(); //选择div的同级元素
$('div').find('.myClass'); //选择div内的class等于myClass的元素

3.5 判断是否选择到了元素

jquery有容错机制,即使没有找到元素,也不会出错,可以用length属性来判断是否找到了元素,length等于0,就是没选择到元素,length大于0,就是选择到了元素。

var $div1 = $('#div1');
var $div2 = $('#div2');
alert($div1.length); // 弹出1
alert($div2.length); // 弹出0
......
<div id="div1">这是一个div</div>

4.jquery样式操作

4.1 jquery用法思想二

同一个函数完成取值和赋值

4.2 操作行间样式

// 获取div的样式
$("div").css("width");
$("div").css("color");//设置div的样式
$("div").css("width","30px");
$("div").css("height","30px");
$("div").css({fontSize:"30px",color:"red"});

特别注意
选择器获取的多个元素,获取信息获取的是第一个,比如:$("div").css("width"),获取的是第一个div的width

4.3 操作样式类名

$("#div1").addClass("divClass2") //为id为div1的对象追加样式divClass2
$("#div1").removeClass("divClass")  //移除id为div1的对象的class名为divClass的样式
$("#div1").removeClass("divClass divClass2") //移除多个样式
$("#div1").toggleClass("anotherClass") //重复切换anotherClass样式

5.绑定click时间

给元素绑定click事件,可以用如下方法:

$('#btn1').click(function(){// 内部的this指的是原生对象// 使用jquery对象用 $(this)})

例子:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><script type="text/javascript" src="js/jquery-1.12.4.min.js"></script><script type="text/javascript">$(function(){// 绑定click事件$('#btn').click(function(){$('.box').toggleClass('col01');})})</script>
</head>
<style type="text/css">.box{width:200px;height:200px;background-color:gold;}.col01{background-color:green;}</style>
<body><input type="button" name="" value="切换样式" id="btn"><div class="box">div元素</div>
</body>
</html>

5.1 获取元素的索引值

有时候需要获得匹配元素相对于同胞元素的索引位置,此时可以用index()方法获取

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><script type="text/javascript" src="js/jquery-1.12.4.min.js"></script><script type="text/javascript">$(function(){var $li = $('.list li');alert( $li.filter('.myli').index() );})</script>
</head>
<body><ul class="list"><li>1</li><li>2</li><li>3</li><li>4</li><li class="myli">5</li><li>6</li><li>7</li><li>8</li></ul>
</body>
</html>

6.jquery特效效果

fadeOut() 淡出
fadeToggle() 切换淡入淡出
hide() 隐藏元素
show() 显示元素
toggle() 切换元素的可见状态
slideDown() 向下展开
slideUp() 向上卷起
slideToggle() 依次展开或卷起某个元素

例子:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><style type="text/css">.box{width:300px;height:300px;background-color:gold;display:none;}</style><script type="text/javascript" src="js/jquery-1.12.4.min.js"></script><script type="text/javascript">$(function(){$('#btn').click(function(){/*$('.box').fadeIn(1000,function(){alert('动画完了!');});*//*$('.box').fadeToggle(1000,function(){alert('动画完了!');});*/// $('.box').show();//$('.box').toggle();//$('.box').slideDown();$('.box').slideToggle(1000,function(){alert('动画完了')});})})</script>
</head><body><input type="button" name="" value="动画" id="btn"><div class="box"></div>
</body>
</html>

 7.jquery链式调用

jquery对象的方法会在执行完后返回这个jquery对象,所有jquery对象的方法可以连起来写:

$('#div1') // id为div1的元素
.children('ul') //该元素下面的ul子元素
.slideDown('fast') //高度从零变到实际高度来显示ul元素
.parent()  //跳到ul的父元素,也就是id为div1的元素
.siblings()  //跳到div1元素平级的所有兄弟元素
.children('ul') //这些兄弟元素中的ul子元素
.slideUp('fast');  //高度实际高度变换到零来隐藏ul元素

层级菜单案例:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>层级菜单</title><style type="text/css">body {font-family: 'Microsoft Yahei';}body,ul {margin: 0px;padding: 0px;}ul {list-style: none;}.menu {width: 200px;margin: 20px auto 0;}.menu .level1,.menu li ul a {display: block;width: 200px;height: 30px;line-height: 30px;text-decoration: none;background-color: #3366cc;color: #fff;font-size: 16px;text-indent: 10px;}.menu .level1 {border-bottom: 1px solid #afc6f6;}.menu li ul a {font-size: 14px;text-indent: 20px;background-color: #7aa1ef;}.menu li ul li {border-bottom: 1px solid #afc6f6;}.menu li ul {display: none;}.menu li ul.current {display: block;}.menu li ul li a:hover {background-color: #f6b544;}</style><script type="text/javascript" src="js/jquery-1.12.4.min.js"></script><script type="text/javascript">$(function() {$('.level1').click(function() {//当前点击的元素紧挨的同辈元素向下展开,再跳到此元素的父级(li),再跳到此父级的其他的同辈元素(li),选择其他同辈元素(li)的子元素ul,然后将它向上收起。// 通过stop() 可以修正反复点击导致的持续动画的问题$(this).next().stop().slideToggle().parent().siblings().children('ul').slideUp();})})</script></head><body><ul class="menu"><li><a href="#" class="level1">水果</a><ul class="current"><li><a href="#">苹果</a></li><li><a href="#">梨子</a></li><li><a href="#">葡萄</a></li><li><a href="#">火龙果</a></li></ul></li><li><a href="#" class="level1">海鲜</a><ul><li><a href="#">蛏子</a></li><li><a href="#">扇贝</a></li><li><a href="#">龙虾</a></li><li><a href="#">象拔蚌</a></li></ul></li><li><a href="#" class="level1">肉类</a><ul><li><a href="#">内蒙古羊肉</a></li><li><a href="#">进口牛肉</a></li><li><a href="#">野猪肉</a></li></ul></li><li><a href="#" class="level1">蔬菜</a><ul><li><a href="#">娃娃菜</a></li><li><a href="#">西红柿</a></li><li><a href="#">西芹</a></li><li><a href="#">胡萝卜</a></li></ul></li><li><a href="#" class="level1">速冻</a><ul><li><a href="#">冰淇淋</a></li><li><a href="#">湾仔码头</a></li><li><a href="#">海参</a></li><li><a href="#">牛肉丸</a></li></ul></li></ul></body>
</html>

 8.jquery动画

通过animate方法可以设置元素某属性值上的动画,可以设置一个或多个属性值,动画执行完成后会执行一个函数。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><script type="text/javascript" src="js/jquery-1.12.4.min.js"></script><script type="text/javascript">$(function(){$('#btn').click(function(){$('.box').animate({'width':600},1000,function(){$('.box').animate({'height':400},1000,function(){$('.box').animate({'opacity':0});});});})$('#btn2').click(function(){$('.box2').stop().animate({'width':'+=100'});})})</script><style type="text/css">.box,.box2{width:100px;height:100px;background-color:gold;}</style>
</head>
<body><input type="button" name="" value="动画" id="btn"><div class="box"></div><br /><br /><input type="button" name="" value="动画" id="btn2"><div class="box2"></div>
</body>
</html>

滑动选项卡案例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><style type="text/css">.btns input{width:100px;height:40px;background-color:#ddd;border:0;outline:none;}.btns .current{background-color:gold;}.cons{width:500px;height:300px;overflow:hidden;position:relative;}.slides{width:1500px;height:300px;position:absolute;left:0;top:0;}.cons .slides div{width:500px;height:300px;background-color:gold;text-align:center;line-height:300px;font-size:30px;float:left;}.cons .active{display: block;}</style><script type="text/javascript" src="js/jquery-1.12.4.min.js"></script><script type="text/javascript">$(function(){var $btn = $('.btns input');var $slides = $('.cons .slides');$btn.click(function(){// this 指的是原生的this,它表示当前点击的对象,使用jquery的对象需要用$(this)// 当前点击的按钮加上current样式后,除了当前,其他的按钮去掉current样式$(this).addClass('current').siblings().removeClass('current');$slides.stop().animate({'left':-500*$(this).index()});})})</script>
</head>
<body><div class="btns"><input type="button" name="" value="01" class="current"><input type="button" name="" value="02"><input type="button" name="" value="03"></div>	<div class="cons"><div class="slides"><div>选项卡一的内容</div><div>选项卡二的内容</div><div>选项卡三的内容</div></div></div>
</body>
</html>

 9.尺寸相关、滚动事件

1、获取和设置元素的尺寸

width()、height()    获取元素width和height  
innerWidth()、innerHeight()  包括padding的width和height  
outerWidth()、outerHeight()  包括padding和border的width和height  
outerWidth(true)、outerHeight(true)   包括padding和border以及margin的width和height

2、获取元素相对页面的绝对位置

offset()

加入购物车案例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><style type="text/css">.chart{width:150px;height:50px;border:2px solid #000;text-align:center;line-height:50px;float:right;margin-right:100px;margin-top:50px;}.chart em{font-style: normal;color:red;font-weight:bold;}.add{width:100px;height:50px;background-color:green;border:0;color:#fff;float:left;margin-top:300px;margin-left:300px;}.point{width:16px;height:16px;background-color:red;position:fixed;left:0;top:0;display:none;z-index:9999;border-radius:50%;}</style><script type="text/javascript" src="js/jquery-1.12.4.min.js"></script><script type="text/javascript">$(function(){var $chart = $('.chart');var $count = $('.chart em');var $btn = $('.add');var $point = $('.point');var $w01 = $btn.outerWidth();var $h01 = $btn.outerHeight();var $w02 = $chart.outerWidth();var $h02 = $chart.outerHeight();$btn.click(function(){var oPos01 = $btn.offset();var oPos02 = $chart.offset();$point.css({'left':oPos01.left+parseInt($w01/2)-8,'top':oPos01.top+parseInt($h01/2)-8});$point.show();$point.stop().animate({'left':oPos02.left+parseInt($w02/2)-8,'top':oPos02.top+parseInt($h02/2)-8},800,function(){$point.hide();var iNum = $count.html();$count.html(parseInt(iNum)+1);});})});</script>
</head>
<body><div class="chart">购物车<em>0</em></div><input type="button" name="" value="加入购物车" class="add"><div class="point"></div>
</body>
</html>

3、获取浏览器可视区宽度高度

$(window).width();
$(window).height();

4、获取页面文档的宽度高度

$(document).width();
$(document).height();

5、获取页面滚动距离

$(document).scrollTop();  
$(document).scrollLeft();

6、页面滚动事件

$(window).scroll(function(){  ......  
})

置顶菜单案例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><style type="text/css">body{margin:0;}.banner{width:960px;height:200px;background-color:cyan;margin:0 auto;}.menu{width:960px;height:80px;background-color:gold;margin:0 auto;text-align:center;line-height:80px;}.menu_back{width:960px;height:80px;margin:0 auto;display:none;}p{text-align:center;color:red;}.totop{width:60px;height:60px;background-color:#000;color:#fff;position:fixed;right:20px;bottom:50px;line-height:60px;text-align:center;font-size:40px;border-radius:50%;cursor:pointer;display:none;}</style><script type="text/javascript" src="js/jquery-1.12.4.min.js"></script><script type="text/javascript">$(function(){$menu = $('.menu');$menu_back = $('.menu_back');$totop = $('.totop');$(window).scroll(function(){//console.log('abc');var iNum = $(document).scrollTop();//document.title = iNum;if(iNum>200){$menu.css({'position':'fixed','left':'50%','top':0,'marginLeft':-480});$menu_back.show();}else{$menu.css({'position':'static',						'marginLeft':'auto'});$menu_back.hide();}if(iNum>400){$totop.fadeIn();}else{$totop.fadeOut();}})$totop.click(function(){$('html,body').animate({'scrollTop':0});})})</script>
</head>
<body><div class="banner"></div><div class="menu">菜单</div><div class="menu_back"></div><div class="totop">↑</div><p>文档内容</p><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><p>文档内容</p><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><p>文档内容</p><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><p>文档内容</p><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><p>文档内容</p><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><p>文档内容</p><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><p>文档内容</p><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><p>文档内容</p><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><p>文档内容</p><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><p>文档内容</p><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><p>文档内容</p><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><p>文档内容</p><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><p>文档内容</p><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><p>文档内容</p><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><p>文档内容</p><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /></body>
</html>

10.jquery属性操作

1、html() 取出或设置html内容

// 取出html内容var $htm = $('#div1').html();// 设置html内容$('#div1').html('<span>添加文字</span>');

2、prop() 取出或设置某个属性的值

// 取出图片的地址var $src = $('#img1').prop('src');// 设置图片的地址和alt属性$('#img1').prop({src: "test.jpg", alt: "Test Image" });

 11.jquery循环

对jquery选择的对象集合分别进行操作,需要用到jquery循环操作,此时可以用对象上的each方法:

例子:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><script type="text/javascript" src="js/jquery-1.12.4.min.js"></script><script type="text/javascript">$(function(){var $li = $('.list li');//$li.css({'backgroundColor':'gold'});$li.each(function(a){//alert(a);//alert( $(this).html() );//alert($(this).index());if($(this).index()%2==0){$(this).css({'backgroundColor':'gold'});}})})</script>
</head>
<body><ul class="list"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li></ul>
</body>
</html>

 效果图:

12.jquery事件

12.1 事件函数列表:

blur() 元素失去焦点
focus() 元素获得焦点
click() 鼠标单击
mouseover() 鼠标进入(进入子元素也触发)
mouseout() 鼠标离开(离开子元素也触发)
mouseenter() 鼠标进入(进入子元素不触发)
mouseleave() 鼠标离开(离开子元素不触发)
hover() 同时为mouseenter和mouseleave事件指定处理函数
ready() DOM加载完成
resize() 浏览器窗口的大小发生改变
scroll() 滚动条的位置发生变化
submit() 用户递交表单

12.2 绑定事件的其他方式

$(function(){$('#div1').bind('mouseover click', function(event) {alert($(this).html());});
});

12.3 取消绑定事件

$(function(){$('#div1').bind('mouseover click', function(event) {alert($(this).html());// $(this).unbind();$(this).unbind('mouseover');});
});

13.事件冒泡

13.1 什么是事件冒泡

在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层次的最顶层,即document对象(有些浏览器是window)

13.2 事件冒泡的作用

事件冒泡允许多个操作被集中处理(把事件处理器添加到一个父级元素上,避免把事件处理器添加到多个子级元素上),它还可以让你在对象层的不同级别捕获事件。

13.2 阻止事件冒泡

事件冒泡机制有时候是不需要的,需要阻止掉,通过 event.stopPropagation()来阻止

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><script type="text/javascript" src="js/jquery-1.12.4.min.js"></script><script type="text/javascript">$(function(){// event 是发生事件的时候的事件对象,使用的时候,通过第一个参数传进来$('.son').click(function(event){alert(1);//通过event对象上的stopPropagation的方法阻止事件冒泡// event.stopPropagation();})$('.father').click(function(event){alert(2);event.stopPropagation();})	$('.grandfather').click(function(){alert(3);// 阻止事件冒泡和阻止默认行为的统一写法:return false;})$(document).click(function(){alert(4);})})</script><style type="text/css">.grandfather{width:300px;height:300px;background-color:green;position:relative;}.father{width:200px;height:200px;background-color:gold;}.son{width:100px;height:100px;background-color: red;position:absolute;left:0;top:400px;}</style>
</head>
<body><div class="grandfather">		<div class="father">			<div class="son"></div></div></div>
</body>
</html>

阻止默认行为

阻止表单提交

$('#form1').submit(function(event){event.preventDefault();
})

合并阻止操作

实际开发中,一般把阻止冒泡和阻止默认行为合并起来来,合并写法可以用

// event.stopPropagation();
// event.preventDefault();// 合并写法:
return false;

 案例:弹框

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><script type="text/javascript" src="js/jquery-1.12.4.min.js"></script><script type="text/javascript">$(function(){$('#btn').click(function(){$('.pop_con').fadeIn();return false;})$(document).click(function(){$('.pop_con').fadeOut();})$('.pop').click(function(){return false;})$('#close').click(function(){$('.pop_con').fadeOut();})})</script><style type="text/css">.pop_con{display:none;}		.pop{position:fixed;width:500px;height:300px;background-color:#fff;border:3px solid #000;left:50%;top:50%;margin-left:-250px;margin-top:-150px;z-index:9999;}.mask{position:fixed;width:100%;height:100%;background-color:#000;opacity:0.3;filter:alpha(opacity=30);left:0;top:0;z-index:9990;}.close{float:right;font-size:30px;}</style>
</head>
<body><input type="button" name="" value="弹出" id="btn"><div class="pop_con"><div class="pop">弹框里面文字投资金额:<input type="text" name=""><a href="#" id="close" class="close">×</a></div><div class="mask"></div></div>
</body>
</html>

效果图:

14.事件原委

事件委托就是利用冒泡的原理,把事件加到父级上,通过判断事件来源的子集,执行相应的操作,事件委托首先可以极大减少事件绑定次数,提高性能;其次可以让新加入的子元素也可以拥有相同的操作。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><style type="text/css">.list{background-color:gold;list-style:none;padding:10px;}.list li{height:30px;background-color:green;margin:10px;}</style><script type="text/javascript" src="js/jquery-1.12.4.min.js"></script><script type="text/javascript">$(function(){//事件委托,将li要发生的事件委托给li的父级$('.list').delegate('li','click',function(){//$(this) 指的是委托的子元素$(this).css({'backgroundColor':'red'});})var $li = $('<li>9</li>');$('.list').append($li);})</script>
</head><body><ul class="list"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li></ul>
</body>
</html>

 点击就会变红

 15.jquery元素节点操作

创建节点

var $div = $('<div>');
var $div2 = $('<div>这是一个div元素</div>');

插入节点

1、append()和appendT0():在现存元素的内部,从后面插入元素

var $span = $('<span>这是一个span元素</span>');
$('#div1').append($span);
......
<div id="div1"></div>

2、prepend()和prependTo():在现存元素的内部,从前面插入元素

3、after()和insertAfter():在现存元素的外部,从后面插入元素

4、before()和insertBefore():在现存元素的外部,从前面插入元素

删除节点

$('#div1').remove();

16.滚轮事件与函数节流

16.1 jquery.mousewheel插件使用

jquery中没有鼠标滚轮事件,原生js中的鼠标滚轮事件不兼容,可以使用jquery的滚轮事件插件jquery.mousewheel.js。

16.2 函数节流

javascript中有些事件的触发频率非常高,比如onresize事件(jq中是resize),onmousemove事件(jq中是mousemove)以及上面说的鼠标滚轮事件,在短事件内多处触发执行绑定的函数,可以巧妙地使用定时器来减少触发的次数,实现函数节流。

17.json

json是JavaScript Object Notation 的首字母缩写,单词的意思是javascript对象表示法,这里说的json指的是类似于javascript对象的一种数据格式,目前这种数据格式比较流行,逐渐替换掉了传统的xml数据格式。

javascript自定义对象:

var owomen={name:'pxy',age:'27,talk:function(s){alert('我会说'+s);}
}

json格式的数据:

{"name":"pxy","age":27
}

 与json对象不同的是,json数据格式的属性名称和字符串值需要用双引号引起来,用单引号或者不用引号会导致读取数据错误。

json的另外一个数据格式是数组,和javascript中的数组字面量相同。

["pxy",27,"beauty"]

18.ajax与jsonp

ajax技术的目的是让javascript发送http请求,与后台通信,获取数据和信息。ajax技术的原理是实例化xmlhttp对象,使用此对象与后台通信,ajax通信的过程不会影响后续javascript的执行,从而实现异步。

18.1 同步和异步

现实生活中,同步指的是同时做几件事情,异步指的是做完一件事后再做另外一件事,程序中的同步和异步是把现实生活中的概念对调,也就是程序中的异步指的是现实生活中的同步,程序中的同步指的是现实生活中的异步。

18.2 局部刷新和无刷新

ajax可以实现局部刷新,也叫做无刷新,无刷新指的是整个页面不刷新,只是局部刷新,ajax可以自己发送http请求,不用通过浏览器的地址栏,所以页面整体不会刷新,ajax获取到后台数据,更新页面显示数据的部分,就做到了页面局部刷新。

18.3 同源策略

ajax请求的页面或资源只能是同一个域下面的资源,不能是其他域的资源,这是在设计ajax时基于安全的考虑。特征报错提示:

XMLHttpRequest cannot load https://www.baidu.com/. No  
'Access-Control-Allow-Origin' header is present on the requested resource.  
Origin 'null' is therefore not allowed access.

18.4 $.ajax使用方法

常用参数:

1、url请求地址

2、type请求方式,默认是 ‘GET’,常用的还有'POST'

3、dataType 设置返回的数据格式,常用的是'json'格式,也可以设置为’html’

4、data 设置发送给服务器的数据

5、success 设置请求成功后的回调函数

6、error 设置请求失败后的回调函数

7、async 设置是否异步,默认值是'true',表示异步

以前的写法:

$.ajax({url:'js/data.json',type:'GET',dataType:'json',data:{'aa;:1},success:function(data){alert(data.name);},error:function(){alert('服务器超时,请重试!')}})

新的写法(推荐):

$.ajax({url:'js/data.json',type:'GET',dataType:'json',data:{'aa':1}
}).done(function(data){alert(data.name);
}).fail(function(){alert('服务器超时,请重试!';
})
// data.json里面的数据: {"name":"tom","age":18}

18.5 案例:首页用户信息读取

18.6 jsonp

ajax只能请求同一个域下的数据域或资源,有时候需要跨域请求数据,就需要用到jsonp技术,jsonp可以跨域请求数据,它的原理主要是利用了<script>标签可以跨域链接资源的特性。jsonp和ajax原理完全不一样,不过jquery将它们封装成同一个函数。

$.ajax({url:'js/data.js',type:'get',dataType:'jsonp',jsonpCallback:'fnBack'
});.done(function(data){alert(data.name);
});.fail(function(){alert('服务器超时,请重试!');
});// data.js里面的数据: fnBack({"name":"tom","age":18});

案例:获取360搜索关键词联想数据

19.本地存储

本地存储分为cookie,以及新增的localStorage和sessionStorage

1、cookie存储在本地,容量最大4k,在同源的http请求时携带传递,损耗带宽,可以设置访问路径,只有此路径及此路径的子路径才能访问cookie,在设置的过期时间之前有效。

2、localStorage 存储在本地,容量为5M或者更大,不会再请求时候携带传递,在所有同源窗口中共享,数据一直有效,除非人为删除,可作为长期数据。

//设置:
localStorage.setItem("dat", "456");
localStorage.dat = '456';//获取:
localStorage.getItem("dat");
localStorage.dat//删除
localStorage.removeItem("dat");

3、sessionStorage存储在本地,容量为5M或者更大,不会在请求时候携带传递,在同源的当前窗口关闭前有效。

localStorage和sessionStorage 合称为Web Storage,Web Storage支持事件通知机制,可以将数据更新的通知监听者,Web Storage的api接口使用更方便。

iPhone的无痕浏览不支持Web Storage,只能用cookie。

20.jquery UI

jquery ui 是以jquery为基础的代码库。包含底层用户交互、动画、特效和可更换主题的可视空间。我们可以直接用它来构建具有很好交互性的web应用程序。

jqueryUI 网址
jQuery UI

相关文章:

JQuery

1.jquery介绍 jQuery是目前使用最广泛的javascript函数库。据统计&#xff0c;全世界排名前100万的网站&#xff0c;有46%使用jQuery&#xff0c;远远超过其他库。微软公司甚至把jQuery作为他们的官方库。 jQuery的版本分为1.x系列和2.x、3.x系列&#xff0c;1.x系列兼容低版…...

「AI 加持的高效架构」高并发场景下的服务器成本优化

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…...

html css 笔记

01_浏览器相关知识 五大主流浏览器&#xff1a; Chrome Safari IE Firefox Opera (拥有自己的内核) 四大内核: webkit Trident Gecko blink. 02_网页相关知识 构成 网址 网站 网页 网页标准&#xff1a; 结构 表现 行为 分别对应 HTML CSS JavaScript 03_HTML简介 H…...

通义万相 2.1:AIGC 领域的 “王炸” 组合如何颠覆创作生态?

引言 在数字化和人工智能的飞速发展中&#xff0c;AIGC&#xff08;AI生成内容&#xff09;技术已经成为推动创作、设计和内容生成领域创新的核心力量。而当通义万相2.1与蓝耘智算平台强强联手&#xff0c;这一“王炸”组合不仅提升了AIGC的效率&#xff0c;还为创作生态带来了…...

Math.NET Numerics 库怎么装

你提到的缺少的库是 Math.NET Numerics。 关于 Math.NET Numerics Math.NET Numerics 是一个用于 .NET 平台的开源数学库&#xff0c;提供了以下功能&#xff1a; 线性代数&#xff08;矩阵运算、求解线性方程组等&#xff09;。数值计算&#xff08;积分、微分、优化等&…...

NPM安装与配置全流程详解(2025最新版)

写目录 一、环境准备与Node.js安装1. 下载Node.js&#xff08;含NPM&#xff09;2. 验证安装 二、NPM核心配置优化1. 全局模块与缓存路径设置2. 镜像加速3. 代理配置&#xff08;企业网络适用&#xff09; 三、NPM基础操作指南1. 项目初始化2. 包管理命令3. 依赖锁定与版本管理…...

python-52-基于Langchain和Faiss实现向量存储和检索的技术原理

文章目录 1 文本加载与预处理1.1 计算文本的MD5哈希值1.2 加载文本并计算哈希2 初始化向量存储2.1 基于Ollama的嵌入模型2.2 获取code和id的对应关系2.3 清空索引向量2.4 基于HuggingFaceEmbeddings的嵌入模型2.4.1 将模型下载到本地2.4.2 使用方式3 添加新文本3.1 处理新文本并…...

游戏引擎学习第140天

回顾并为今天的内容做准备 目前代码的进展到了声音混音的部分。昨天我详细解释了声音的处理方式&#xff0c;声音在技术上是一个非常特别的存在&#xff0c;但在游戏中进行声音混音的需求其实相对简单明了&#xff0c;所以今天的任务应该不会太具挑战性。 今天我们会编写一个…...

Jetpack Navigation 实战:Fragment 和 Activity 的交互与导航

在 Android 开发中&#xff0c;使用 Jetpack Navigation 组件可以方便地管理 Fragment 和 Activity 之间的导航。以下是如何使用 Jetpack Navigation 实现 Fragment 之间、Activity 之间以及 Activity 与 Fragment 之间跳转的实战示例。 1. 添加依赖 首先&#xff0c;在 build.…...

Linux中的基本指令(上)

目录 ls指令 判断linux中文件 pwd指令 认识路径 ​编辑 绝对路径/相对路径 cd指令 简要理解用户 理解家目录 echo指令和printf指令 touch指令 mkdir指令 cat指令 tree指令 rmdir指令和rm指令 man指令 cp指令 which指令 alias 指令 date指令 cal指令 理解…...

多用户网页在线聊天室(测试报告)

文章目录 多用户网页在线聊天室一&#xff0c;项目概括1.1 项目名称1.2 测试时间1.3 项目背景1.3 编写目的 二&#xff0c;测试计划2.1 测试环境与配置2.2 测试用例2.3实际执行用例2.3.1登录2.3.2聊天消息列表展示2.3.3聊天消息详情页展示2.3.4联系人页展示2.3.5信息的编辑与发…...

字节青训营后端方向的个人总结(2025年3月4日)

字节青训营的结营总结&#xff08;25寒假&#xff09; ——致青训营队友的一封信 明天就是大项目结项的日子了&#xff0c;不知道大家在这方面学习、精进了多少&#xff0c;也许有的朋友收获颇多并且已经完成了项目&#xff0c;我个人对此表示由衷的恭喜和祝贺。 当初自告奋…...

VX iOS分析随记

断SVC的时候看调用栈&#xff0c;发现里面一个特别大的ollvm函数。vx版本8054 * thread #36, queue com.apple.root.default-qos, stop reason breakpoint 4.1 frame #0: 0x0000000111ad6124 WeChat___lldb_unnamed_symbol1315083 20 WeChat___lldb_unnamed_symbol13150…...

docker 小记

一、卸载 查看当前版本 docker -v2. 如果有&#xff0c;先停止docker systemctl stop docker如果是yum安装&#xff0c;卸载方式为 #已防版本冲突&#xff0c;直接卸载 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-lat…...

AI代码编程辅助工具

现在AI火的一塌糊涂&#xff0c;作为技术应该更应该关注当前AI对编程行业的影响。 分享下当前网络上最火的网络编程辅助工具。 以下是个人搜集到的可以对编程起辅助作用的工具&#xff1a; 2025年最佳AI编程辅助工具 1. GitHub Copilot 这个工具也许你已经在使用了&#xff0…...

使用 kubectl cp 命令可以在 Kubernetes Pod 和本地主机之间拷贝文件或文件夹

使用 kubectl cp 命令可以在 Kubernetes Pod 和本地主机之间拷贝文件或文件夹 kubectl cp <namespace>/<pod-name>:<pod-path> <local-path> # 从 Pod 拷贝到本地 kubectl cp <local-path> <namespace>/<pod-name>:<pod-path&g…...

【eNSP实战】交换机配置端口隔离

交换机端口隔离可以实现在同一个VLAN内对端口进行逻辑隔离&#xff0c;端口隔离分为L2层隔离和L3层隔离&#xff0c;这里只进行L2层隔离演示。 拓扑图 路由器AR1配置GE 0/0/1配置IP&#xff0c;其余PC主机各自配置IP和网关。 现将PC1到PC4四个主机全部进行L2层隔离&#xff0c…...

动态规划-第2篇

前言&#xff1a;在上一篇文章中&#xff0c;我们了解了动态规划的基本概念和解决问题的基本思路。通过分解问题、存储子问题的解&#xff0c;动态规划为我们提供了高效的解决方案。然而&#xff0c;动态规划并不是一成不变的&#xff0c;它有很多不同的技巧和变种&#xff0c;…...

数据库查问题常用OS命令汇总

1、内存使用情况查看 top //查看活跃进程占用情况 free -mh //查看操作系统当前可用内存 2、cpu使用情况 lscpu //查看os cpu情况 sar -u -f sar文件名 -s hh:mm:ss -e hh:mm:ss //查看对应日期的历史cpu情况 top //查看当前活跃进程使用cpu情况 3、io情况 iostat …...

基于springboot住院管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 随着世界经济信息化、全球化的到来和电子商务的飞速发展&#xff0c;推动了很多行业的改革。若想达到安全&#xff0c;快捷的目的&#xff0c;就需要拥有信息化的组织和管理模式&#xff0c;建立一套合理、畅通、高效的线上管理系统。当前的住院管理存在管理效率低下&…...

《用Python+PyGame开发双人生存游戏!源码解析+完整开发思路分享》

导语​ "你是否想过用Python开发一款可玩性高的双人合作游戏&#xff1f;本文将分享如何从零开始实现一款类《吸血鬼幸存者》的生存射击游戏&#xff01;包含完整源码解析、角色系统设计、敌人AI逻辑等核心技术点&#xff0c;文末提供完整代码包下载&#xff01;" 哈…...

【ES6】在ES6中自定义数组

在ES6中是允许自定义类扩展基础类型的&#xff0c;因为这些基础类型是有构造函数的&#xff0c;在JS中类就是函数。 // 自定义数组 class myArray extends Array {constructor() {super();} }let arr new myArray();arr.push(1);console.log(arr);重写Array的原生方法 ES6的…...

软件开发项目有哪些风险

软件开发项目风险主要包括 需求不明确、技术实现难度大、进度延误、成本超支、质量问题。其中&#xff0c;需求不明确可能导致功能设计反复修改&#xff1b;技术实现难度大会使开发过程中不断遇到未知挑战&#xff1b;进度延误常常因资源配置不足或变更频繁而发生&#xff1b;成…...

47.HarmonyOS NEXT 登录模块开发教程(二):一键登录页面实现

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; HarmonyOS NEXT 登录模块开发教程&#xff08;二&#xff09;&#xff1a;一键登录页面实现 文章目录 HarmonyOS NEXT 登录模块开发教程&#xff0…...

RAGFlow版本升级-Win10系统Docker

下载源码压缩包 https://github.com/infiniflow/ragflow.git 删除旧版本代码文件夹&#xff0c;把下载的代码解压到原先目录 更新一下env文件&#xff1a;ragflow/docker/.env 把值改为最新版本即可 RAGFLOW_IMAGEinfiniflow/ragflow:v0.17.1 更新一下docker docker compose -…...

dns劫持是什么?常见的劫持类型有哪些?如何预防?

DNS劫持的定义 DNS劫持&#xff08;Domain Name System Hijacking&#xff09;是一种网络攻击手段&#xff0c;攻击者通过篡改域名解析的过程&#xff0c;将用户对某个域名的访问请求重定向到错误或恶意的IP地址。这种攻击可能导致用户访问到钓鱼网站、恶意广告页面&#xff0…...

Python精进系列: isinstance 函数

Python isinstance函数&#xff1a;类型检查的得力助手 目录 Python isinstance函数&#xff1a;类型检查的得力助手引言一、isinstance函数基础语法结构简单示例 二、isinstance函数的应用场景函数参数类型检查数据处理与类型转换面向对象编程中的类型判断 三、isinstance函数…...

【基础知识】回头看Maven基础

版本日期修订人描述V1.02025/3/7nick huang创建文档 背景 项目过程中&#xff0c;对于Maven的pom.xml文件&#xff0c;很多时候&#xff0c;我通过各种参考、仿写&#xff0c;最终做出想要的效果。 但实际心里有些迷糊&#xff0c;不清楚具体哪个基础的配置所实现的效果。 今…...

练习题:81

目录 Python题目 题目 题目分析 需求理解 关键知识点 实现思路分析 代码实现 代码解释 运行思路 结束语 Python题目 题目 使用字典推导式创建一个字典&#xff0c;键为 1 到 10 的整数&#xff0c;值为键的平方。 题目分析 需求理解 本题要求使用 Python 的字典…...

三角函数:从宇宙法则到AI革命的数学密钥

——跨越三千年的数学语言与现代科技全景透视 一、数学本质&#xff1a;宇宙的波动密码 1.1 拓扑学视角下的三角函数 三角函数本质是单位圆上点的坐标参数化&#xff0c;其数学表达可抽象为&#xff1a; { x cos ⁡ θ ℜ ( e i θ ) y sin ⁡ θ ℑ ( e i θ ) \begin…...

【论文笔记】Best Practices and Lessons Learned on Synthetic Data for Language Models

论文信息 论文标题&#xff1a;Best Practices and Lessons Learned on Synthetic Data for Language Models 作者信息&#xff1a; Ruibo Liu, Jerry Wei, Fangyu Liu, Chenglei Si, Yanzhe Zhang, Jinmeng Rao, Steven Zheng, Daiyi Peng, Diyi Yang, Denny Zhou1 and Andre…...

Java高频面试之集合-10

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;详解红黑树&#xff1f;HashMap为什么不用二叉树/平衡树呢&#xff1f; 一、红黑树&#xff08;Red-Black Tree&#xff…...

Keil 5 环境下STM32F4 HAL库版本MDK工程创建详细步骤(适合小白,附工程源码)

一、前期准备 1.安装好keil Keil(MDK) 5 软件安装教程-CSDN博客https://blog.csdn.net/qq_42748213/article/details/90485750 2.安装好STM32F4的芯片包 Keil5中STM32F4xx芯片包下载安装_stm32f4芯片包-CSDN博客https://blog.csdn.net/weixin_45783141/article/details/131…...

【微服务】Nacos 配置动态刷新(简易版)(附配置)

文章目录 1、实现方法2、配置依赖 yaml3、验证效果 1、实现方法 环境&#xff1a;Nacos、Java、SpringBoot等 主要是在boostrap.yaml中的data-id属性下配置refresh:true来实现动态更新 2、配置依赖 yaml 具体的版本参考官方的说明&#xff1a;官方版本说明 <!--读取boo…...

LabVIEW cRIO中CSV文件的读取

在LabVIEW cRIO中读取CSV文件&#xff0c;需通过文件传输、路径配置、数据解析等步骤实现。本文详细说明如何通过代码读取本地存储的CSV文件&#xff0c;并探讨直接通过对话框选择文件的可行性及替代方案。 一、CSV文件传输至cRIO本地存储 1. 使用NI MAX文件管理 步骤&#xf…...

双周报Vol.67: 模式匹配支持守卫、LLVM 后端发布、支持 Attribute 语法...多项核心技术更新!

2025-03-10 语言更新 模式匹配支持守卫&#xff08;Pattern Guard&#xff09; 模式守卫可以通过在模式后追加 if ... 的语法结构来指定。有模式守卫的分支只有在被模式匹配的值满足对应模式&#xff0c;并且模式守卫为真的情况下才会执行。如果模式守卫为假&#xff0c;则会…...

从青铜到王者:六大排序算法实战解析

前言 在编程的世界里,排序算法如同一颗璀璨的明珠,闪耀着智慧的光芒。它不仅是计算机科学的基础知识点,更是每一位程序员必备的技能。今天,就让我们一同走进排序算法的世界,深入探究冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序这六大经典算法的精髓所在,…...

011-base64

base64 编码 以下是C实现的Base64字符串加密算法及其原理说明&#xff0c;综合了多个技术文档的核心要点&#xff1a; 一、Base64编码原理 Base64是一种将二进制数据转换为ASCII字符的编码方式&#xff0c;核心原理基于 3字节转4字符 的转换规则&#xff1a; 分组规则&…...

汽车NVH诊断案例 | 纯电车急加速过大弯底盘异响

引言 失去发动机的掩蔽效应后&#xff0c;新能源电车的NVH问题&#xff0c;成为了困扰维修技师新难点。风噪、胎噪、电机高频啸叫等问题更容易车主识别&#xff0c;根源却难以被有效分辨。如何更精准且高效地识别电车NVH问题根源&#xff1f;今天分享的这个案例&#xff0c;内…...

springcloud gateway通过数据库获取路由信息

在 Spring Cloud Gateway 中结合 MyBatis 动态从数据库加载路由配置&#xff0c;可以实现灵活的路由管理。以下是详细实现步骤&#xff1a; 1. 数据库表设计 创建路由配置表 gateway_route&#xff1a; CREATE TABLE gateway_route (id varchar(50) NOT NULL COMMENT 路由唯一…...

QtDataVisualization使用

Qt Data Visualization 是一个开源的第三方库&#xff0c;它为Qt框架提供了高级的数据可视化功能。这个库允许开发者创建复杂的3D和2D图表&#xff0c;包括但不限于散点图、曲面图、条形图等。它基于Qt 3D模块&#xff0c;因此可以充分利用Qt 3D引擎的强大功能来呈现三维数据。…...

【Go每日一练】实现简单的控制台计算器

&#x1f47b;创作者&#xff1a;丶重明 &#x1f47b;创作时间&#xff1a;2025年3月7日 &#x1f47b;擅长领域&#xff1a;运维 目录 1.&#x1f636;‍&#x1f32b;️题目&#xff1a;简单的控制台计算器2.&#x1f636;‍&#x1f32b;️代码输出3.&#x1f636;‍&#…...

TDengine 数据对接 EXCEL

简介 通过配置使用 ODBC 连接器&#xff0c;Excel 可以快速访问 TDengine 的数据。用户可以将标签数据、原始时序数据或按时间聚合后的时序数据从 TDengine 导入到 Excel&#xff0c;用以制作报表整个过程不需要任何代码编写过程。 前置条件 准备以下环境&#xff1a; TDen…...

1.8 双指针专题:四数之和

1.题目链接 18. 四数之和 - 力扣&#xff08;LeetCode&#xff09;18. 四数之和 - 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元…...

基于用户标签和协同过滤混合算法的商城推荐系统设计与实现

一、研究背景 随着电子商务的快速发展&#xff0c;用户面对海量商品时往往面临“信息过载”问题。传统的推荐算法&#xff08;如协同过滤&#xff09;在用户行为数据稀疏或新用户场景下存在冷启动、推荐多样性不足等缺陷。 现状与挑战&#xff1a; 协同过滤&#xff1a;依赖用…...

软件版本号设计

软件版本号的设计是软件开发中的重要环节&#xff0c;它不仅帮助开发团队管理代码&#xff0c;还能让用户清楚地了解软件的更新状态。以下是常见的版本号设计方法和最佳实践&#xff0c;供你参考&#xff1a; 1. 常见的版本号设计规范 语义化版本控制&#xff08;Semantic Ver…...

ESMFold对决AlphaFold:蛋白质-肽相互作用预测的新进展

今天向大家介绍的这篇文章题目为&#xff1a;“Protein−Peptide Docking with ESMFold Language Model”&#xff0c;近期发表在JCTC上。 本文主要研究 ESMFold 语言模型在蛋白质-肽对接中的应用。通过探索多种对接策略&#xff0c;评估其在预测蛋白质-肽相互作用方面的性能&a…...

【项目】负载均衡式在线OJ

负载均衡式在线OJ 目录 负载均衡式在线OJ 1.项目介绍&#xff1a; 2.comm 2.1 log.hpp 日志等级 开放式日志 时间戳工具 2.2 util.hpp TimeUtil类 PathUtil类 FileUtil类 StringUtil类 3.Compile_server 3.1compile_run.hpp RemoveTempFile CodeToDesc Start 3.…...

Android启动速度优化

Android启动速度优化 一、应用启动基础知识 1.1 启动类型 Android应用的启动类型主要分为三种: 冷启动(Cold Start):应用进程不存在,系统需要创建新的进程,加载并启动应用。这是最耗时的启动方式。 温启动(Warm Start):应用进程存在,但Activity可能被销毁,需要重新创…...

python爬虫碰到IP被封的情况,如何解决?

在数据抓取和爬虫开发的实践中&#xff0c;Python作为一种功能强大且易于上手的编程语言&#xff0c;被广泛应用于网络数据的采集。然而&#xff0c;随着网络环境的日益复杂&#xff0c;爬虫活动也面临着越来越多的挑战&#xff0c;其中IP被封便是常见且棘手的问题。IP被封不仅…...