jQuery 就是一款免费且开放源代码的JavaScript代码库;
jQuery设计的宗旨就是:写更少的代码,做更多的事情;
下载代码库:
官方下载地址:http://jquery.com/download/
注意:
jq自2.0版本开始,不在支持IE9一下浏览器;
自3.0版本开始,针对移动端做了优化处理;
引入并使用:
<body>
<input type="button" id="btu" value="点击">
<div id="re" style="width:200px;height:200px">fdsdiv>
body>
<script src="jquery-1.8.3.js">script>
<script>
var btu = document.getElementById('btu');
//绑定点击事件
btu.onclick = function(){
//ID选择器,改变CSS样式的背景颜色为红色
$('#re').css('background','red');
}
script>
什么是选择器?
在JS中可以根据不同条件获取DOM:
//根据ID属性值获取
document.getElementById();
//根据clss属性值获取
document.getElementsByClassName()
//根据name属性值获取
document.getElementsByName()
//根据标签名称获取
document.getElementsByTagName()
jq代码中获取指定ID的元素,我们使用的是:
$('#re')
<body>
<h1>jQuery对象与DOM对象的关系h1>
<ul>
<li>导航1li>
<li>导航2li>
<li>导航3li>
<li>导航4li>
ul>
<p id="test">testp>
body>
<script>
var test = document.getElementById('test');
$(test).css('background','green');
script>
$()返回的到底是什么?
是对象,但不是DOM 对象,而是JQuery对象
jQuery对象转化为DOM对象,直接[索引]取值即可
$('li')[2].style.background = 'blue';
也可以用get(索引)方法
$('li').get(3).style.background = 'blue';
DOM对象转化为jQuery对象,直接把DOM对象当作值或者参数传给$()
JQ 对象与JS对象转换的应用:
$('li').click(function(){
// this 指向原生js
// 想要在事件里使用JQ对象,那么必须将this转为jq对象才能使用
$(this).css('background','red');
// alert(this.innerHTML);
});
<body>
<input type="button" id="btu" value="点击"> <br>
<img src="91.jpg" id="img">
body>
<script>
$('#btu').click(function(){
//获取被选元素的属性值。
var s = $('#img').attr('src');
alert(s);
//设置被选元素的属性值
$('#img').attr('src','92.png')
//设置被选元素的 多个 属性值
$('#img').attr({'src':'92.png','alt':'sdfds'})
//函数返回值为属性值
$('img').attr('width',function(){
return 10*40;
});
//删除元素属性
$('img').removeAttr('src');
});
script>
知识点:
attr(name) :根据属性的名称获取元素的属性值
attr(key,value) :设置元素的属性,key属性,value属性值
attr(properties) :一次为元素设置多个属性,要求参数是一个json对象
attr(key,fn) :通过函数的返回值设置元素的属性
removeAttr(name) :移除元素的属性
<head>
<meta charset="utf-8">
<title>title>
<script type="text/javascript" src="jq183.js">script>
<style media="screen">
td{
border: 1px solid black;
}
table{
width: 500px; height: 180px;
border-collapse: collapse;
background-color: #e0e0e0;
}
.l{
background-color: #fff;
}
style>
head>
<body>
<table>
<tr>
<td>编号td><td>姓名td>
<td>性别td><td>年龄td>
tr>
<tr>
<td>1td><td>刘能td>
<td>男td><td>45td>
tr>
table>
body>
<script type="text/javascript">
$('tr').mouseover(function(){
//添加class值为l
$(this).addClass('l');
//如果有就移除,没有就添加
// $(this).toggleClass('l');
})
$('tr').mouseleave(function(){
//移除class值为l
$(this).removeClass('l');
//如果有就移除,没有就添加
// $(this).removeClass('l');
})
script>
知识点:
addClass(class) :为元素添加class属性
removeClass(class) :移除元素的class属性
toggleClass(class) :切换元素的class属性,如果有就移除,没有就添加
hasClass(class) :判断元素是否具有某个class属性
<body>
<div style="width:300px;height:300px;border:1px red solid">
itcast
div>
body>
<script>
//获取style属性值
alert($('div').css('width'));
//设置style 属性值
$('div').css('background','yellow');
//一次性设置多个值
$('div').css({
width:200,
height:200,
background:'pink'
});
script>
知识点
css(name) :根据name获取元素的css属性值
css(name,value) :设置元素的属性值
css(properties) :一次为元素设置多个属性值,要求参数是一个json对象
<body>
<div style="width:300px;height:300px;border:1px red solid">
itcast
div>
body>
<script>
// 获取div位置
var pos = $('div').offset();
alert('横坐标开始位置'+pos.left);
alert('纵坐标开始位置'+pos.top);
//修改坐标位置
$('div').offset({
left:50,
top:30
});
script>
知识点
offset() :获取元素的横纵坐标,返回一个json对象,拥有left与top属性
offset(coordinates) :设置元素位置要求是一个json对象,必须包含left与top属性
<body>
<div style="width:300px;height:300px;border:1px red solid">
itcast
div>
body>
<script>
//获取宽高值
alert($('div').width());
alert($('div').height());
//设置宽高值
$('div').width(500);
$('div').height(500);
script>
知识点
width() :获取元素的宽度
width(value) :设置元素的宽度
height() :获取元素的高度
height(value) :设置元素的高度
<body>
<input type="button" name="" value="文本值" id="i">
<hr>
<input type="text" name="" value="" id="u">
<div id="d"><div><p>icastp>div>div>
body>
<script>
$('#i').click(function(){
//文本框的内容
alert($('#u').val());//获取
$('#u').val(222);//设置
//文本内容
$('#d').html('女林那夕'); //设置
alert($('#d').html()); //获取(包括标签)
$('#d').text('女林那夕');//设置
alert($('#d').text());//获取(不包括标签)
//html()方法和text()方法的区别
$('#d').html('女林那夕'); //内容会被解析
$('#d').text('女林那夕'); //内容原样输出
});
script>
知识点
val() :获取表单元素的value值
val(val) :设置表单元素的value值
html() :获取元素的内容
html(val) :设置元素的内容
text() :获取元素的文本内容
text(val) :设置元素的文本内容
05-1.html
<body>
<img src="05.jpg" alt="">
body>
<script>
window.onload = function(){
alert('图片加载完成');
}
script>
ready事件
<body>
<img src="05.php" alt="">
body>
<script>
//DOM 及所有资源加载完成后执行
window.onload = function(){
alert('图片加载完成');
}
//ready 当DOM加载完毕就会被触发运行
// $().ready(function(){
// alert(1);
// })
//ready 的简化写法
$(function(){
alert('DOM 加载完毕');
})
script>
原生js事件绑定语法:
DOM对象.on事件名称 = 事件的处理程序
jq事件绑定语法:
jq对象.事件名称(事件的处理程序);
在JS中,事件绑定一共有三种形式:
行内绑定、动态绑定、事件监听。
问题:jQuery中的事件绑定是哪一种呢?
<body>
<input type="button" value="点击">
body>
<script>
//jq对象 事件绑定
$('input').click(function(){
alert(4);
})
$('input').click(function(){
alert(5);
})
script>
两次事件被先后触发,第一次绑定并没有被替换,因此可知,
jq的事件绑定是事件监听
所有事件都是方法
blur(fn) :当失去焦点时触发
change(fn) :当状态改变时触发
click(fn) :当单击时触发
dblclick(fn) :当双击时触发
focus(fn) :当获得焦点时触发
keydown(fn) :当键盘按下时触发
keyup(fn) :当键盘弹起时触发
keypress(fn) :当键盘按下时触发
mousedown(fn) :鼠标按下时触发
mouseup(fn) :鼠标弹起时触发
mousemove(fn) :鼠标移动时触发
mouseover(fn) :鼠标悬浮时触发
mouseout(fn) :鼠标离开时触发
resize(fn) :当窗口大小改变时触发
scroll(fn) :当滚动条滚动式触发
select(fn) :当文本框中的文本选中时触发
submit(fn) :当表单提交时触发
案例效果:
京东天猫等网站首页轮播图,鼠标悬浮之上时,轮播图停止轮播效果,鼠标离开后,轮播效果继续;
知识点:
hover(fn1,fn2):
当鼠标移动到一个匹配的元素上面时,会触发指定的第一个函数。
当鼠标移出这个元素时,会触发指定的第二个函数。
案例代码:
<body>
<img src="./05-6hover.gif" alt="" id="img">
body>
<script>
$('#img').hover(function(){//鼠标悬浮选中元素之上
$(this).attr('src','05-6hover.png');
},function(){//鼠标离开选中元素
$(this).attr('src','05-6hover.gif');
})
script>
效果:
点击折叠再点击展开效果,类似‘我的电脑’侧边目录;
知识点:
toggle(fn1,fn2,fn3…,fnN):
点击切换事件,第一次点击执行fn1,第二次点击执行fn2,第三次点击执行fn3,
当所有函数执行完后再点击,则再次从第一个开始执行;
案例代码:
<head>
<title>title>
<script src="./jq183.js">script>
<style>
div,h2{margin: 0;padding: 10px}
#box{width: 300px;}
#box h2{background-color: #369;}
#box div{border: 1px solid red; height: 200px}
style>
head>
<body>
<div id="box">
<h2>折叠效果h2>
<div id="box2">
itcast折叠效果展示
div>
div>
body>
<script>
$('#box').click(function() {
$('#box2').toggle();
})
script>
问题及效果:
某不可描述之网站有不可描述的资源;
但点击下载时,弹出广告页面,再回去点击下载后,下载生效;
知识点:
one(‘事件1 事件2 事件N’,fun) :
为选中元素绑定 一次性 事件(多个事件用空格隔开);
bind(‘事件1 事件2 事件N’,fun) :
为选中元素绑定一个或多个事件(多个事件用空格隔开);
注:jQuery 3.0中已弃用此方法,请用 on()代替。
unbind(‘事件1 事件2 事件N’) :
bind 的反向操作,为选中元素 删除 一个或多个事件(多个事件用空格隔开);
jQuery 3.0中已弃用此方法,请用 off()代替。
案例代码:
<body>
<input type="button" id="btu" value="下载">
body>
<script>
$('#btu').one('click',function(){ //为按钮绑定一次性点击事件
//在新标签页打开广告
window.open('http://www.baidu.com');
//为元素绑定多个事件
$(this).bind('click mouseleave',function(){
alert('下载成功');
//删除绑定过的事件
$(this).unbind('mouseleave');
})
})
script>
什么是事件冒泡??
本意是:
div被点击时才会触发事件,但是,因为事件冒泡特性,未被点击的div也触发了事件的执行;
因此,我们需要阻止事件的冒泡行为;
事件冒泡问题代码展示:
<head>
<title>title>
<meta charset="UTF-8">
<script src="jq183.js">script>
<style>
div{padding: 50px}
#div3{width: 300px;height: 300px;background-color: red}
#div2{width: 200px;height: 200px;background-color: yellow}
#div1{width: 100px;height: 100px;background-color: blue}
style>
head>
<body>
<div id="div3">
<div id="div2">
<div id="div1">div>
div>
div>
body>
<script>
$('#div3').click(function(){
alert(3);
})
$('#div2').click(function(event){
alert(2);
})
$('#div1').click(function(){
alert(1);
})
script>
修改以上代码中 JS 部分,阻止事件冒泡;
<script>
$('#div3').click(function(ev){
alert(3);
ev.stopPropagation();
})
$('#div2').click(function(ev){
alert(2);
ev.stopPropagation();
})
$('#div1').click(function(ev){
alert(1);
ev.stopPropagation();
})
script>
知识点:
event.stopPropagation()
防止事件冒泡到DOM树上,也就是不触发的任何前辈元素上的事件处理函数。
什么是默认行为?
如:a 标签的点击跳转、submit按钮的点击提交、选中文本的拖拽搜索等等……
有时我只是需要a标签的样式并不希望有点击跳转的效果;
用户填写完表单时,表单内容也会在前台JS中进行验证,内容不合法,数据也不能提交;
因此,在某些时候,我们需要阻止标签元素的默认行为;
案例代码:
<body>
<a href="http://www.qq.com" id="tx">腾讯链接a> <br>
<hr>
<form action="05-8-2.php" method="get">
用户名:<input type="text" name="names" value="" id="names"><br>
<input type="submit" value="提交" id="sub">
form>
body>
<script>
$('#tx').click(function(){
alert(1);
})
$('#sub').click(function(){
if($('#names').val()==''){
alert('用户名不能为空');
}
})
script>
修改上述代码的JS部分,阻止元素默认行为
<script>
$('#tx').click(function(ev){
alert(1);
ev.preventDefault();
})
$('#sub').click(function(ev){
if($('#names').val()==''){
alert('用户名不能为空');
ev.preventDefault();
}
})
script>
知识点:
event.preventDefault()
阻止默认事件行为的触发。
案例代码:
<head>
<title>title>
<meta charset="UTF-8">
<script src="./jq183.js">script>
<style>
div,h2{margin: 0;padding: 10px}
#box{width: 300px;}
#box h2{background-color: #369;}
#box div{border: 1px solid red; height: 200px}
style>
head>
<body>
<div id="box">
<h2>折叠效果h2>
<div id="box2">
itcast折叠效果展示
div>
div>
body>
<script>
$('#box').click(function(event) {
$('#box2').toggle(function() {
$('#box2').hide(
3000,
'swing',
function() {}
);
}, function() {
$('#box2').show(3000,'linear',function(){
alert(123)
});
});
});
script>
知识点:
hide([speed,[fn]]) 隐藏显示的元素
speed : 三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或
表示动画时长的毫秒数值(如:1000);
fn:在动画完成时执行的函数。
show([speed,[fn]]) 显示隐藏的匹配元素
speed : 三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或
表示动画时长的毫秒数值(如:1000);
fn:在动画完成时执行的函数。
效果:
图片的滑动收起与隐藏
案例代码:
<body>
<input type="button" id="down" value="slideDown">
<input type="button" id="up" value="slideUp">
<input type="button" id="toggle" value="slideToggle">
<br>
<hr>
<img src="./06-2silde.png" id="re" >
body>
<script>
$('#down').click(function(){
//滑动效果展示
$('#re').slideDown(3000,function(){
alert('总有刁民想害朕');
});
})
$('#up').click(function(){
//滑动效果隐藏
$('#re').slideUp(3000,function(){
alert('我还会回来的');
});
})
$('#toggle').click(function(){
//若隐藏则展示,若展示则隐藏
$('#re').slideToggle(3000,function(){
alert('你还敢点吗?');
});
})
script>
知识点:
slideDown([speed],[fn]) 显示
通过高度变化(向下增大)来动态地显示所有匹配的元素,在显示完成后可选地触发一个回调函数。
slideUp([speed,[fn]]) 隐藏
通过高度变化(向上减小)来动态地隐藏所有匹配的元素,在隐藏完成后可选地触发一个回调函数。
slideToggle([speed],[fn]) 切换
通过高度变化来切换所有匹配元素的可见性,并在切换完成后可选地触发一个回调函数
效果:
图片淡入淡出效果
案例代码:
<body>
<input type="button" id="in" value="fadeIn">
<input type="button" id="out" value="fadeOut">
<br>
<hr>
<img src="./06-3fade.jpg" id="re" >
body>
<script>
$('#in').click(function(){
//淡入效果展示
$('#re').fadeIn(3000,function(){
alert('总有刁民想害朕');
});
})
$('#out').click(function(){
//淡出效果隐藏
$('#re').fadeOut(3000,function(){
alert('我还会回来的');
});
})
script>
知识点:
fadeIn([speed],[fn]) 淡入
通过不透明度的变化来实现所有匹配元素的淡入效果,并在动画完成后可选地触发一个回调函数。
fadeOut([speed],[fn]) 淡出
通过不透明度的变化来实现所有匹配元素的淡出效果,并在动画完成后可选地触发一个回调函数。
知识点:
animate(params,[speed],[easing],[fn])
params:一组包含作为动画属性和终值的样式属性和及其值的集合
speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)
easing:要使用的擦除效果的名称(需要插件支持).默认jQuery提供"linear" 和 “swing”.
fn:在动画完成时执行的函数,每个元素执行一次。
案例代码
<body>
<input type="button" id="ai" value="animate">
<br>
<hr>
<img src="./06-4animate.jpg" id="re" style="position:absolute">
body>
<script>
$('#ai').click(function(){
//淡入效果展示
$('#re').animate(
{left:"900",top:"-500"},//动画属性
3000, //执行时长
function(){ //执行后的回调函数
alert('成全你');
}
);
})
script>
知识点:
append(content)
向匹配的元素内部追加内容。
appendTo(content)
把匹配的元素追加到另一个指定的元素集合中
prepend(content)
内容前置到匹配的元素内部;
prependTo(content)
把匹配的元素前置到另一个、指定的 元素 集合中。
案例代码:
<body>
<input type="button" value="dina" id="btu">
<div id="re">
我是DIV
div>
<p id="p">P标签p>
body>
<script>
$('#btu').click(function(){
//向匹配的元素内部追加内容。
$('#re').append('尾部');
//把匹配的元素追加到另一个指定的元素集合中
$('#re').appendTo('#p');
//内容前置到匹配的元素内部;
$('#re').prepend('头部');
//把匹配的元素前置到另一个、指定的 元素 集合中。
$('#re').prependTo('#p');
})
script>
知识点:
after(content)
在匹配的元素之后插入内容。
before(content)
在匹配的元素之前插入内容。
insertAfter(content)
把匹配的元素插入到另一个、指定的元素集合的后面。
insertBefore(content)
把匹配的元素插入到另一个、指定的元素集合的前面。
代码:
<script>
$('#btu').click(function(){
//在匹配的元素之后插入内容。
$('#re').after('标签后');
//在匹配的元素之前插入内容。
$('#re').before('标签前');
//把匹配的元素插入到另一个、指定的元素集合的后面。
$('#re').insertAfter('#p');
//把匹配的元素插入到另一个、指定的元素元素集合的前面。
$('#p').insertBefore('#re');
})
script>
注意:
内部插入与外部插入的区别
知识点:
empty()
删除匹配的元素集合中所有的子节点。
remove([expr])
从DOM中删除所有匹配的元素。
案例代码:
<body>
<input type="button" value="删除内容" id="empty">
<input type="button" value="删除节点1" id="remove">
<input type="button" value="删除节点2" id="re">
<hr>
<ul id="chi">
<li id="lzj">辣子鸡li>
<li>香酥鸭li>
<li>糖醋鱼li>
<li>红烧肉li>
ul>
body>
<script>
//删除选中节点的内容
$('#empty').click(function(){
$('#chi').empty();
})
//在DOM树中删除选中节点
$('#remove').click(function(){
$('#chi').remove();
})
//在选中节点中删除指定节点
$('#re').click(function(){
$('li').remove('#lzj');
})
script>
知识点:
clone([Even])
克隆匹配的DOM元素
Even:一个布尔值(true 或者 false)指示事件处理函数是否会被复制。
案例代码:
修改上节代码
<body>
<input type="button" value="克隆" id="clone">
<hr>
<ul id="chi">
<li id="lzj">辣子鸡li>
<li>香酥鸭li>
<li>糖醋鱼li>
<li>红烧肉li>
ul>
body>
<script>
$('#lzj').click(function(){
alert(1);
})
$('#clone').click(function(){
//仅克隆内容
$('#lzj').clone().appendTo('#chi');
//克隆内容与事件
$('#lzj').clone(true).appendTo('#chi');
})
script>
知识点:
replaceWith(content)
将所有匹配的元素替换成指定的HTML或DOM元素。
html([val])
val 有值,则用于设定HTML内容的值,没有则获取内容值;
案例代码:
<body>
<input type="button" value="替换DOM" id="replace">
<input type="button" value="替换内容" id="html">
<hr>
<ul id="chi">
<li id="lzj">辣子鸡li>
<li>香酥鸭li>
<li>糖醋鱼li>
<li>红烧肉li>
ul>
body>
<script>
$('#replace').click(function(){
var t = '西湖牛肉羹 '
//替换选中节点的DOM
$('#lzj').replaceWith(t);
})
$('#html').click(function(){
//替换选中节点的内容
$('#lzj').html('蒜蓉西兰花');
})
script>
知识点:
wrap(html|ele|fn)
把所有匹配的元素用其他元素的结构化标记包裹起来。
unwrap()
移出选中元素的父元素
wrapAll(html|ele)
将所有匹配的元素用单个元素包裹起来
wrapInner(html|ele|fn)
将每一个匹配的元素的子内容(包括文本节点)用一个HTML结构包裹起来
案例代码:
<body>
<input type="button" value="wrap" id="wrap">
<input type="button" value="wrapAll" id="wrapAll">
<input type="button" value="unwrap" id="unwrap">
<input type="button" value="wrapInner" id="wrapInner">
<hr>
<div>海贼王div>
<div>火影忍者div>
<div>龙猫div>
<div><p>千与千寻p>div>
body>
<script>
$('#wrap').click(function(){
$('div').wrap('');
})
$('#wrapAll').click(function(){
$('div').wrapAll('');
})
$('#unwrap').click(function(){
$('p').unwrap();
})
$('#wrapInner').click(function(){
$('div').wrapInner('');
})
script>
将选择器以 jq方法调用 形式实现;
知识点:
eq(index) :根据元素的index索引来查找元素
filter(expr) :筛选操作,$(‘div’).filter(‘.cls1’);
not(expr) :匹配除指定选择器以外的其他元素
children([expr]) :获取当前元素下的所有子元素
find(expr) :获取当前元素下的所有后代元素
next([expr]) :获取当前元素下紧邻的下一个元素
prev([expr]) :获取当前元素上紧邻的上一个元素
parent([expr]) :获取当前元素的父元素
siblings([expre]) :获取当前元素的所有同级兄弟元素
案例代码:
<body>
<input type="button" value="eq" id="eq">
<div>div111div>
body>
<script>
$('#eq').click(function(){
$('div').eq(0).html('div');
})
script>
效果:
类似奇妙清单、todolist等任务应用;
案例代码:
<head>
<title>title>
<meta charset="UTF-8">
<script src="jq183.js">script>
<style>
#box{
width: 400px;
margin: 0 auto;
}
#show{
font-size: 12px;
}
span{
font-size: 12px;
background-color: #F0FFF0;
}
s{
font-size: 12px;
color: #7B7B7B;
background-color: #F0F0F0;
}
style>
head>
<body>
<div id="box">
<input type="text" value="" style="width:300px" id="list_value">
<input type="button" value="添加任务" id="add">
<div class="lists">
<div>
<input type="checkbox"><span>明天去吃麻辣小龙虾span>
div>
div>
<hr>
<div>
<p id="show" >显示已完成任务p>
div>
<div id="hide" style="display:none">
<div>
<s>撸串,撸666串s>
div>
div>
div>
body>
<script>
//添加新任务
$('#add').click(function(){
//获取表单内容
var val = $('#list_value').val();
//表单内容不能为空
if(val != ''){
//创建任务
var lists = ''+ val +'';
//添加任务
$('.lists').prepend(lists);
//为任务绑定事件
$('#t2').on('click',function(){
//取值
var v = $(this).next().html();
//创建已完成任务
var o = ''+v+'';
//添加到已完成任务列表
$('#hide').prepend(o);
//找到父级元素并删除
$(this).parent().remove();
});
//清空表单
$('#list_value').val('');
}else{
alert('不能空');
}
})
//已完成 任务的显示和隐藏
$('#show').click(function() {
$('#hide').toggle()
})
script>
效果:
想实现商城购物车中全选与反选功能,发现jq中并没有提供相应功能;
类似这种jq中没有的功能,我们都可以通过插件的形式自己实现,并在jq中使用;
知识点:
基本语法:
$.fn.extend(ob)或者 $、jQuery.fn.extend(ob)
ob: JS对象,例:
$.fn.extend({
ex1.function(){},
ex2.function(){},
});
案例代码:
<body>
<div id="box">JQ插件div>
body>
<script>
$.fn.extend({
ex1:function(color){
this.css('background',color);
}
});
//使用
$('#box').ex1('yellow');
script>
知识点:
jQuery.extend(ob) 或者 $.extend(ob)
ob: JS对象,
例:
$.extend({
ex1.function(){},
ex2.function(){},
});
案例代码:
<script>
$.extend({
min: function(a, b) { return a < b ? a : b; },
max: function(a, b) { return a > b ? a : b; }
});
//使用
alert($.min(1,3));
script>
<body>
<input type="button" value="全选" id="all">
<input type="button" value="全不选" id="unall">
<input type="button" value="反选" id="un">
<hr>
<input type="checkbox" value=""> HTML <br>
<input type="checkbox" value=""> Javascript <br>
<input type="checkbox" value=""> PHP <br>
<input type="checkbox" value=""> Python <br>
<input type="checkbox" value=""> Java <br>
<input type="checkbox" value=""> C/C++ <br>
body>
<script>
$.fn.extend({
all:function(){
this.attr('checked',true);
},
unall:function(){
this.attr('checked',false);
},
un:function(){
for(var i=0;i<this.length;i++){
if(this[i].checked == true){
this[i].checked = false;
}else{
this[i].checked = true;
}
}
}
});
//使用
$('#all').click(function(){
$(':checkbox').all();
});
$('#unall').click(function(){
$(':checkbox').unall();
});
$('#un').click(function(){
$(':checkbox').un();
});
script>
效果:
在上一节插件中有个反选的功能,本质上就是对选中的每个对象进行遍历操作;
jq原生有没有类似的功能呢?
知识点:
each(callback)
以每一个匹配的元素作为上下文来执行一个函数。
案例代码:
拿到上面代码进行修改
<script>
$('#un').click(function(){
$(':checkbox').each(function(){
//判断并取反
if(this.checked == true){
this.checked = false;
}else{
this.checked = true;
}
//直接将值取反
// this.checked = !this.checked;
});
});
script>
jQ 对于ajax的封装有两层实现;
$.ajax
为底层封装实现;
基于 $.ajax
,分别实现了$.get
与$.post
的高层封装实现;
基本语法:
$.ajax(obj)
对象的参数设置及含义:
async: 布尔类型,代表是否异步,true代表异步,false同步,默认为true
cache: 是否缓存,布尔类型,true代表缓存,false代表不缓存,默认为true
complete: 当Ajax状态码(readyState)为4的时候所触发的回调函数
contentType: 发送信息至服务器时内容编码类型;(默认: “application/x-www-form-urlencoded”)
data: 要求是一个字符串格式,Ajax发送时所传递的数据
dataType: 期待的返回值类型,可以是text,xml,json,默认为text类型
success: 当Ajax状态码为4且响应状态码为200时所触发的回调函数
type: Ajax发送网络请求的方式,(默认: “GET”);
url: 请求的url地址
案例代码:
GET 请求
<body>
<input type="button" value="点击" id="btu">
body>
<script>
$('#btu').click(function(){
//get请求
$.ajax({
url:'9-2.php?id=11',
success:function(data){
alert(data);
}
});
});
script>
POST 请求
//POST请求及同步异步
$.ajax({
url:'9-2.php',
type:'post',
data:'id=1111',
success:function(data){
alert(data);
},
// async:false,
});
// alert(22); //检验同步异步
设置返回值类型
//设置返回值类型
$.ajax({
url:'9-2.php?id=11',
success:function(data){
alert(data.a);
},
//jq接到后台的json字符串,转成对象后呈现给用户
dataType:'json',
});
PHP后台代码
// sleep(3);
if($_GET['id']==11){ //get
// if($_POST['id']==11){ //post
// echo 'jq_ajax';
echo json_encode(['a'=>'2222']); //json 返回
}else{
echo 'hhh';
}
基本语法:
$.get(url, [data], [callback], [type])
url:待载入页面的URL地址
data:待发送 Key/value 参数。
callback:载入成功时回调函数。
type:返回内容格式,xml, html, script, json, text, _default。
案例代码:
<script>
$('#btu').click(function(){
$.get('9-2.php',function(data){
alert(data.a);
},'json');
});
script>
但是注意:IE浏览器存在缓存问题;
解决缓存问题 修改:
$.post(url, [data], [callback], [type])
url:发送请求地址。
data:待发送 Key/value 参数。
callback:发送成功时回调函数。
type:返回内容格式,xml, html, script, json, text, _default。
案例代码:
<script>
$('#btu').click(function(){
$.post('9-2.php',
{id:'11'},
function(data){
alert(data.a);
},'json');
});
script>
Ajax技术受到浏览器同源策略的限制,禁止从一个域上向另外一个域发送请求。
也就是说,受到请求的 URL 的域必须与当前 Web 页面的域相同。这意味着浏览器隔离来自不同源的内容,以防止它们之间的操作。
后台不同域下的PHP代码
$arr = ['a'=>1,'b'=>'san','c'=>'wu','d'=>4];
$str = json_encode($arr);
echo $_GET['fn']."($str)";
前端jq跨域的三种用法
<script>
$('#btu').click(function(){
//$.ajax 方法的jsonp跨域
$.ajax({
url:'http://bbs.com/1.php?fn=?',
dataType:'jsonp',
success:function(data){
alert(data.b);
}
});
//$.get 方法的jsonp跨域
$.get('http://bbs.com/1.php?fn=?',function(data){
alert(data.b);
},'jsonp');
// $.getJSON 方法的jsonp跨域
$.getJSON(
'http://bbs.com/1.php?fn=?',
function(data){
alert(data.b);
},
);
});
script>
找到适合自己的插件下载,解压后将无关文件删除;
本质上来说,只要引入js文件就可以使用了,但有时也需要样式表等文件,具体看需求;
http://www.jq22.com/jquery-info13734
mysql_connect('localhost','root','');
mysql_query('use test');
mysql_query('set names utf8');
//SQL 语句
$sql = "select * from test ";
$res = mysql_query($sql);
$data = [];
while($row = mysql_fetch_assoc($res)){
$data[] = $row;
}
echo json_encode($data);
page.html
<head>
<meta charset="UTF-8">
<title>Titletitle>
<link href="page.css" type="text/css" rel="stylesheet"/>
<script src="http://www.jq22.com/jquery/jquery-1.10.2.js">script>
<script type="text/javascript" src="page.js">script>
head>
<body>
<ul id="demoContent">ul>
<ul class="page" id="page">ul>
body>
html>
<script type="text/javascript">
$.get('page.php',function(data){
datas = data;
console.log(datas);
options={
"id":"page",//显示页码的元素
"data":datas,//显示数据
"maxshowpageitem":3,//最多显示的页码个数
"pagelistcount":2,//每页显示数据个数
"callBack":function(result){
var cHtml="";
for(var i=0;i<result.length;i++){
cHtml+="" + result[i].name+"";//处理数据
}
$("#demoContent").html(cHtml);//将数据增加到页面中
}
};
page.init(datas.length,1,options);
},'json')
script>
http://www.jqueryrotate.com/
基本使用:
<body>
<img src="ie.png" id="img">
body>
<script src="../jq183.js">script>
<script src="jQueryRotate.js">script>
<script>
$("#img").rotate({
bind:{
//绑定鼠标悬浮旋转事件
mouseover : function() {
//从当前角度旋转至180度
$(this).rotate({animateTo:180});
},
//绑定鼠标离开旋转事件
mouseout : function() {
//从当前角度旋转至0度
$(this).rotate({animateTo:0});
}
}
});
script>
抽奖案例:
<head>
<title>title>
<meta charset="UTF-8">
<script src="../jq183.js">script>
<script src="jQueryRotate.js">script>
<style>
.rotate-bg{
width: 509px;
height: 509px;
background: url(ly-plate.png);
position: absolute;
top: 0;
left: 0;
}
.lottery-star{
width:214px;
height:214px;
position:absolute;
top:150px;
left:147px;
}
style>
head>
<body>
<div class="rotate-bg">div>
<div class="lottery-star">
<img src="rotate-static.png" id="lotteryBtn">
div>
body>
<script>
$('#lotteryBtn').rotate({
bind:{
click:function(){
var d = Math.random()*360;
if(0<d && d<=45){
var text='再接再励';
}else if(45<d && d<=90){
var text='恭喜获得2等奖';
}else if(90<d && d<=180){
var text='再接再励';
}else if(180<d && d<=225){
var text='恭喜获得3等奖';
}else if(225<d && d<=315){
var text='再接再励';
}else if(315<d && d<360){
var text='恭喜获得yi等奖';
}
var zhuan = d+1080+180;
$("#lotteryBtn").rotate({
angle:0,
duration: 5000,
animateTo: zhuan, //angle是图片上各奖项对应的角度,1440是我要让指针旋转4圈。所以最后的结束的角度就是这样子^^
callback:function(){
alert(text)
}
});
}},
});
script>
介绍:
ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,
兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),
底层依赖轻量级的 Canvas 类库 ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。
ECharts3 中更是加入了更多丰富的交互功能以及更多的可视化效果,并且对移动端做了深度的优化。
使用:
官网: http://echarts.baidu.com/
根据教程,首先下载相应代码包:
引入 ECharts
<head>
<meta charset="utf-8">
<script src="echarts.min.js">script>
head>
绘制一个简单的图表
在绘图前我们需要为 ECharts 准备一个具备高宽的 DOM 容器。
<body>
<div id="main" style="width: 600px;height:400px;">div>
body>
然后就可以通过 echarts.init 方法初始化一个 echarts 实例并通过 setOption 方法生成一个简单的柱状图
<script type="text/javascript">
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
// 指定图表的配置项和数据
var option = {
title: {
text: 'ECharts 入门示例'
},
tooltip: {},
legend: {
data:['销量']
},
xAxis: {
data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
},
yAxis: {},
series: [{
name: '销量',
type: 'bar',
data: [5, 20, 36, 10, 10, 20]
}]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
script>
注意: 代码中的 option 变量值 为 图标配置项,具体含义可查看手册 配置项
向后台动态获取数据,形成图标
复制上节代码,修改JS部分
<script>
var myChart = echarts.init(document.getElementById('main'));
// 指定图表的配置项和数据
myChart.setOption({
title: {
text: '姓名及年龄分布',
},
tooltip: {show:true},
legend: {
data:['姓名及年龄'],
},
xAxis: {
splitNumber:'20',
data: []
},
yAxis: {},
series: [{
name: '姓名及年龄',
type: 'bar',
data: []
}]
});
$.get('d2.php',function(das){
// 使用刚指定的配置项和数据显示图表。
myChart.setOption({
xAxis: {
data: das.name
},
series: [{
data: das.age
}]
});
},'json'
)
script>
后台PHP代码
mysql_connect('localhost','root','');
mysql_query('use test');
mysql_query('set names utf8');
//SQL 语句
$sql = "select * from test where id<14";
$res = mysql_query($sql);
$data = [];
while($row = mysql_fetch_assoc($res)){
$data[] = $row;
}
//组合制作 echarts 所需要的数据结构
$d = [];
foreach($data as $v){
$d['name'][] = $v['name'];
$d['age'][] = $v['age'];
}
echo json_encode($d);
假设我们的服务器在北京,广州的用户来访问我们的网站,
我们的代码需要跨越2000+公里下载到用户的浏览器;
如果将我们的代码放在各大城市,根据用户所在地去距离用户最近的地方下载,那么我们网站的打开速度将会大大提升;
这就是所谓的CDN加速的基本原理;
而像 jQ 这样的公用代码库,也有各大公司提供的相应CDN节点,而且是免费的;
http://www.bootcdn.cn
http://cdn.code.baidu.com