jquery简介

1.jquery是什么       ☛ 参考用法

  • jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team。

  • jQuery是继prototype之后又一个优秀的Javascript框架。其宗旨是——WRITE LESS,DO MORE,写更少的代码,做更多的事情。

  • 它是轻量级的js库(压缩后只有21k) ,这是其它的js库所不及的,它兼容CSS3,还兼容各种浏览器 (IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。

  • jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互。

  • jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。

  • jQuery能够使用户的html页保持代码和html内容分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需定义id即可。

2.什么是jQuery对象?

  • jQuery 对象就是通过jQuery包装DOM对象后产生的对象。

  • jQuery 对象是 jQuery 独有的如果一个对象是 jQuery 对象那么它就可以使用 jQuery 里的方法: $(“#test”).html();

比如:

$("#test").html()意思是指:获取ID为test的元素内的html代码。其中html()是jQuery里的方法

这段代码等同于用DOM实现代码: document.getElementById(" test ").innerHTML;

  虽然jQuery对象是包装DOM对象后产生的,但是jQuery无法使用DOM对象的任何方法,同理DOM对象也不能使用jQuery里的方法.乱使用会报错

约定:如果获取的是 jQuery 对象那么要在变量前面加上$. 

var $variable = jQuery对象 

var variable = DOM对象 

二   寻找元素(重要的选择器和筛选器)

2.1选择器

2.1.1 基本选择器

$("*")
$("#id")
$(".class")
$("element")
$(".class,p,div") //每一个选择器匹配到的元素合并后一起返回。

2.1.2 层级选择器

$(".outer div")            //匹配所有的后代元素
$("parent > child") //匹配所有的子元素
$("prev + next") //匹配所有紧接在 prev 元素后的 next 元素
$("prev ~ siblings ") //匹配 prev 元素之后的所有 siblings 元素(同级元素)

2.1.3 基本筛选器

$('li:first');    //获取第一个元素
$('li:last') //最后一个元素 :not(selector) //去除所有与给定选择器匹配的元素配的元素
$("input:not(:checked)") //查找所有未选中的 input 元素 $("tr:even") //索引为偶数的元素,从 0 开始
$("tr:odd") //索引为奇数的元素,从 0 开始 $("tr:eq(1)") //给定索引值的元素
$("tr:gt(0)") //大于给定索引值的元素
$("tr:lt(2)") //小于给定索引值的元素 $(":focus") //当前获取焦点的元素
$(":animated") //正在执行动画效果的元素

2.1.4 属性选择器

$("div[id]")
$('[id="div1"]')
$("div[name!='new']")
$("div[name^='new']")
$("div[name&='new']")
$("div[name*='new']") //复合:
$('["alex="sb"][id]')
$("div[id][name$='man']")

2.1.5 表单选择器

$(":input")      //匹配所有 input, textarea, select 和 button 元素
$(":text") //所有的单行文本框
$(":password") //所有密码框
$(":radio") //所有单选按钮
$(":checkbox") //所有复选框
$(":submit") //所有提交按钮
$(":reset") //所有重置按钮
$(":button") //所有button按钮
$(":file") //所有文件域 $("input:checked") //所有选中的元素
$("select option:selected") //select中所有选中的option元素

2.1.6 表单对象属性选择器

$(":enabled")        //匹配所有可用元素
$(":disabled") //匹配所有不可用元素
$(":checked") //匹配所有选中中元素
$(":selected") //匹配所有选中的option元素

2.1.7 内容选择器

$(":contains(text)")  //匹配包含给定文本的元素
$(":empty") //匹配所有不包含子元素或者文本的空元素
$(":parent") //匹配含有子元素或者文本的元素
$(":has(selector)") //匹配含有选择器所匹配的元素的元素

2.1.8 可见性选择器  

$(":hidden")        //匹配所有不可见元素,或者type为hidden的元素
$(":visible") //匹配所有的可见元素

2.2筛选器

2.2.1 过滤

$("p").eq(0)       //当前操作中第N个jQuery对象,类似索引
$('li').first() //第一个元素
$('li').last() //最后一个元素
$(this).hasClass("test") //元素是否含有某个特定的类,返回布尔值
$('li').has('ul') //包含特定后代的元素

2.2.2 查找

$("div").children()      //div中的每个子元素,第一层
$("div").find("span") //div中的包含的所有span元素,子子孙孙 $("p").next()    //紧邻p元素后的一个同辈元素
$("p").nextAll() //p元素之后所有的同辈元素
$("#test").nextUntil("#test2") //id为"#test"元素之后到id为'#test2'之间所有的同辈元素,掐头去尾 $("p").prev() //紧邻p元素前的一个同辈元素
$("p").prevAll() //p元素之前所有的同辈元素
$("#test").prevUntil("#test2") //id为"#test"元素之前到id为'#test2'之间所有的同辈元素,掐头去尾 $("p").parent() //每个p元素的父元素
$("p").parents() //每个p元素的所有祖先元素,body,html
$("#test").parentsUntil("#test2") //id为"#test"元素到id为'#test2'之间所有的父级元素,掐头去尾 $("div").siblings() //所有的同辈元素,不包括自己

实例 左侧菜单 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<style>
.menu{
position: fixed;
left: 0;
top: 0;
background-color: darkgray;
width: 150px;
height: 500px;
}
.menu .title{
background-color: greenyellow;
color: red;
cursor: pointer;
}
.hide{
display: none;
}
.option{
background-color: wheat;
}
</style>
<body> <div class="menu">
<div class="item">
<div class="title">菜单一</div>
<div class="option">
<div>1111</div>
<div>1111</div>
<div>1111</div>
</div>
</div> <div class="item">
<div class="title">菜单二</div>
<div class="option hide">
<div>1111</div>
<div>1111</div>
<div>1111</div>
</div>
</div> <div class="item">
<div class="title">菜单三</div>
<div class="option hide">
<div>1111</div>
<div>1111</div>
<div>1111</div>
</div>
</div>
</div> <script src="jquery-1.8.2.js"></script>
<script type="text/javascript">
$('.title').click(function(){
$(this).siblings().removeClass("hide")
$(this).parent().siblings().children('.option').addClass('hide')
})
</script>
</body>
</html>

demo

实例 tab切换

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
ul{
list-style: none;
padding: 0;
margin: 0;
}
.title{
background: #DDDDDD;
}
.clearfix:after{
display: block;
content: 'x';
height: 0;
visibility: hidden;
clear: both;
}
ul li{
background: blue;
color: white;
float: left;
padding: 8px 10px;
}
.content{
border: 1px solid #DDDDDD;
min-height: 200px;
}
.active{
background-color: white;
color: #000000;
}
.dis-con{
display: none;
}
</style>
</head>
<body>
<div class="tab-menu">
<div class="title clearfix">
<ul>
<li class="active" target='d1'>价格趋势</li>
<li target='d2' >市场分布</li>
<li target='d3' >其他</li>
</ul>
</div> <div class="content" id='content'>
<div con='d1'>content1</div>
<div class="dis-con" con='d2'>content2</div>
<div class="dis-con" con='d3'>content3</div>
</div>
</div> <script src="jquery-1.8.2.js"></script>
<script type="text/javascript">
$('.title ul li').click(function(){
$(this).addClass('active').siblings().removeClass('active');
var att = $(this).attr('target')
$("div[con="+att+"]").removeClass('dis-con').siblings().addClass('dis-con')
})
</script>
</body>
</html>

demo

三   操作元素(属性 CSS 和 文档处理)

3.1 属性操作

3.1.1 基本属性操作

$("div").attr("id");            //返回文档中所有div的id属性值
$("div").attr("id","4"); //设置所有div的id属性
$("div").attr({'alex':'sb'}) //设置多个属性,字典形式
$("div").removeAttr("name");   //将文档中图像的src属性删除 $("input[type='checkbox']").prop("checked", true); //选中复选框
$("input[type='checkbox']").prop("checked", false);
$("img").removeProp("src");    //删除img的src属性

3.1.2 CSS类操作

$("p").addClass("selected");      //为p元素加上 'selected' 类
$("p").removeClass("selected"); //从p元素中删除 'selected' 类
$("p").toggleClass("selected"); //如果存在就删除,否则就添加

3.1.3 HTML代码/本文/值

$('p').html();               //返回p元素的html内容
$("p").html("Hello <b>nick</b>!"); //设置p元素的html内容
$('p').text();            //返回p元素的文本内容
$("p").text("nick");        //设置p元素的文本内容
$("input").val();          //获取文本框中的值
$("input").val("nick");      //设置文本框中的内容

实例 编辑框正反选

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body> <button onclick='selectAll()'>全选</button>
<button onclick='cancel()'>取消</button>
<button onclick='reverse()'>反选</button>
<table border="1" width="100px">
<thead> </thead>
<tbody>
<tr>
<td><input type="checkbox" /></td>
<td>1111</td>
</tr>
<tr>
<td><input type="checkbox" /></td>
<td>2222</td>
</tr>
<tr>
<td><input type="checkbox" /></td>
<td>3333</td>
</tr>
<tr>
<td><input type="checkbox" /></td>
<td>4444</td>
</tr>
</tbody>
</table> <script src="jquery-1.8.2.js"></script>
<script type="text/javascript">
function selectAll(){
$(":checkbox").prop('checked',true)
}
function cancel(){
$(":checkbox").prop('checked',false)
}
function reverse(){
$(":checkbox").each(function (){
if( $(this).prop('checked')){
$(this).prop('checked',false)
}else{
$(this).prop('checked',true)
}
})
}
</script>
</body>
</html>

demo

实例 模态对话框

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
.shadow{
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0,0,0,.6);
z-index: 10;
}
.infoedit{
position: fixed;
top: 50%;
left: 50%;
margin-left: -150px;
margin-top: -150px;
width: 300px;
height: 300px;
background-color: white;
z-index: 20;
}
.hide{
display: none;
}
</style>
<script src="jquery-1.8.2.js"></script>
<script>
$(function(){
$('[target=edit]').click(function(){
$('.shadow,.infoedit').removeClass('hide'); var server_info = $(this).prevAll();
server_info.each(function(k,v){
var text = $(this).text();
var target = $(this).attr('target');
$('#'+target).val(text);
})
}) $('#cancelEdit').click(function(){
$('.infoedit :text').val('');
$('.shadow,.infoedit').addClass('hide');
}) $('#addInfo').click(function(){
$('.shadow,.infoedit').removeClass('hide');
})
})
</script>
</head>
<body>
<button id="addInfo">添加</button>
<table border="1">
<thead>
<tr>
<th>服务器</th>
<th>ip地址</th>
<th>端口号</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr>
<td target='server'>c1.com</td>
<td target='ip'>10.1.1.1</td>
<td target='port'>8881</td>
<td target='edit'>编辑</td>
</tr>
<tr>
<td target='server'>c2.com</td>
<td target='ip'>10.1.1.2</td>
<td target='port'>8882</td>
<td target='edit'>编辑</td>
</tr>
<tr>
<td target='server'>c3.com</td>
<td target='ip'>10.1.1.3</td>
<td target='port'>8883</td>
<td target='edit'>编辑</td>
</tr>
</tbody>
</table> <div class="shadow hide"></div>
<div class="infoedit hide">
<form action="" method="get">
<p>服务器:
<input type="text" id='server' />
</p> <p>ip地址:
<input type="text" id='ip' />
</p> <p>端口号:
<input type="text" id='port' />
</p> <input type="submit" value="提交" />
<input type="button" value="取消" id='cancelEdit'/>
</form>
</div>
</body>
</html>

demo

3.2 CSS操作

3.2.1 样式

$("p").css("color");          //访问查看p元素的color属性
$("p").css("color","red"); //设置p元素的color属性为red
$("p").css({ "color": "red", "background": "yellow" }); //设置多个属性要用{}字典形式

3.2.2 位置

$('p').offset()     //元素在当前视口的相对偏移,Object {top: 122, left: 260}
$('p').offset().top
$('p').offset().left
$("p").position() //元素相对父元素的偏移,对可见元素有效,Object {top: 117, left: 250} $(window).scrollTop() //获取滚轮滑的高度
$(window).scrollLeft() //获取滚轮滑的宽度
$(window).scrollTop('100') //设置滚轮滑的高度为100 $(window).height() //获取窗口的高度
$(document).height() //获取文档的高度

3.2.3 尺寸

$("p").height();    //获取p元素的高度
$("p").width(); //获取p元素的宽度 $("p:first").innerHeight() //获取第一个匹配元素内部区域高度(包括补白、不包括边框)
$("p:first").innerWidth() //获取第一个匹配元素内部区域宽度(包括补白、不包括边框) $("p:first").outerHeight() //匹配元素外部高度(默认包括补白和边框)
$("p:first").outerWidth() //匹配元素外部宽度(默认包括补白和边框)
$("p:first").outerHeight(true) //为true时包括边距

实例 返回顶部

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
.goTop{
position: fixed;
right: 10px;
bottom: 10px;
width: 40px;
height: 40px;
background-color: darkgray;
text-align: center;
}
.hide{
display: none;
}
</style> </head>
<body>
<div style="height: 1000px;"></div> <div class="goTop hide">返回顶部</div> <script src="jquery-1.8.2.js"></script>
<script type="text/javascript"> window.onscroll = function(){ if( $(window).scrollTop() > 50 ){
$(".goTop").removeClass('hide')
}else{
$(".goTop").addClass('hide')
}
} $('.goTop').click(function(){ $(window).scrollTop(0)
}) </script>
</body>
</html>

demo

缓慢返回顶部(带效果):

$('#backTop').bind('click',function(){
$('html,body').animate( {scrollTop:0} );
});

注:html,body需一起使用。

实例 滚动菜单 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title> <style type="text/css">
body{
margin: 0;
padding: 0;
}
.head{
height: 50px;
background-color: burlywood;
}
.menu{
position: absolute;
left: 0;
background-color: ghostwhite;
width:200px;
height: 600px;
float:left;
}
.menu-fix{
position: fixed;
top:10px;
}
.father{
background-color: gray;
position: absolute;
left: 210px;
}
.item{
width: 800px;
height: 600px;
}
.title{
text-align: center;
}
.active{
background-color: cornflowerblue;
color: darkgreen;
}
</style>
</head>
<body>
<div class="head"></div> <div class="menu">
<div class="title active" target='c1'>第一张</div>
<div class="title" target='c2'>第二张</div>
<div class="title" target='c3'>第三张</div>
</div> <div class="father">
<div class="content">
<div class="item" con='c1'>第一章</div>
<div class="item" con='c2'>第二章</div>
<div class="item" con='c3'>第三章</div>
</div>
</div> <script src="jquery-1.8.2.js"></script>
<script>
window.onscroll = function(){ var current = $(window).scrollTop()
if(current > 50 ){
$('.menu').addClass('menu-fix')
}
else{
$('.menu').removeClass('menu-fix')
} if( current + $(window).height() == $(document).height() ){
$('.menu').children(":last").addClass('active').siblings().removeClass('active');
return
} $('.item').each(function(){ var item_top = $(this).offset().top;
var item_height = $(this).height();
var title = $(this).attr('con')
if ( current > item_top && current < item_height+item_top){
$(".title[target="+title+"]").addClass('active').siblings().removeClass('active')
} }) }
</script> </body>
</html>

demo

3.3 文档处理

3.3.1 内部插入

$("p").append("<b>nick</b>");    //每个p元素内后面追加内容
$("p").appendTo("div");     //p元素追加到div内后
$("p").prepend("<b>Hello</b>"); //每个p元素内前面追加内容
$("p").prependTo("div");   //p元素追加到div内前

3.3.2 外部插入

$("p").after("<b>nick</b>");     //每个p元素同级之后插入内容
$("p").before("<b>nick</b>"); //在每个p元素同级之前插入内容
$("p").insertAfter("#test"); //所有p元素插入到id为test元素的后面
$("p").insertBefore("#test"); //所有p元素插入到id为test元素的前面

3.3.3 替换

$("p").replaceWith("<b>Paragraph. </b>");    //将所有匹配的元素替换成指定的HTML或DOM元素
$("<b>Paragraph. </b>").replaceAll("p"); //用匹配的元素替换掉所有 selector匹配到的元素

3.3.4 删除

$("p").empty();     //删除匹配的元素集合中所有的子节点,不包括本身
$("p").remove(); //删除所有匹配的元素,包括本身
$("p").detach(); //删除所有匹配的元素(和remove()不同的是:所有绑定的事件、附加的数据会保留下来)

3.3.5 复制

$("p").clone()      //克隆元素并选中克隆的副本
$("p").clone(true) //布尔值指事件处理函数是否会被复制

实例 克隆方法的应用

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title> </head>
<body>
<div class="outer">
<div class="condition"> <div class="icons" style="display:inline-block">
<a onclick="add(this);"><button>+</button></a>
</div> <div class="input" style="display:inline-block">
<input type="checkbox">
<input type="text" value="alex">
</div>
</div>
</div> <script src="jquery-1.8.2.js"></script>
<script> function add(self){
var $duplicate = $(self).parent().parent().clone();
$duplicate.find('a[onclick="add(this);"]').attr('onclick',"removed(this)").children("").text("-");
$duplicate.appendTo($(self).parent().parent().parent()); }
function removed(self){ $(self).parent().parent().remove() } </script>
</body>
</html>

demo

四   事件

4.1 页面载入

  当页面载入成功后再运行的函数事件  使用后可以在开头位置写入jq代码

$(document).ready(function(){
do something...
}); //简写
$(function($) {
do something...
});

4.2 事件处理

//bind 为每个匹配元素绑定事件处理函数,绑定多个用{}。     3.0+版本已弃用
$("p").bind("click", function(){
alert( $(this).text() );
});
$(menuF).bind({
"mouseover":function () {
$(menuS).parent().removeClass("hide");
},"mouseout":function () {
$(menuS).parent().addClass("hide");
}
}); $("p").click(function(){}) = $("p").bind("click",function(){}) $("p").one( "click", fun...) //one 绑定一个一次性的事件处理函数
$("p").unbind( "click" ) //解绑一个事件

4.3 事件委派    3.0+版本已弃用

// 与bind 不同的是当事件发生时才去临时绑定。
$("p").delegate("click",function(){
do something...
}); $("p").undelegate();    //p元素删除由 delegate() 方法添加的所有事件
$("p").undelegate("click") //从p元素删除由 delegate() 方法添加的所有click事件

4.4 事件

$("p").click();      //单击事件
$("p").dblclick(); //双击事件
$("input[type=text]").focus() //元素获得焦点时,触发 focus 事件
$("input[type=text]").blur() //元素失去焦点时,触发 blur事件
$("button").mousedown()//当按下鼠标时触发事件
$("button").mouseup() //元素上放松鼠标按钮时触发事件
$("p").mousemove() //当鼠标指针在指定的元素中移动时触发事件
$("p").mouseover() //当鼠标指针位于元素上方时触发事件
$("p").mouseout()  //当鼠标指针从元素上移开时触发事件
$(window).keydown() //当键盘或按钮被按下时触发事件
$(window).keypress() //当键盘或按钮被按下时触发事件,每输入一个字符都触发一次
$("input").keyup() //当按钮被松开时触发事件
$(window).scroll() //当用户滚动时触发事件
$(window).resize() //当调整浏览器窗口的大小时触发事件
$("input[type='text']").change() //当元素的值发生改变时触发事件
$("input").select() //当input 元素中的文本被选择时触发事件
$("form").submit() //当提交表单时触发事件
$(window).unload() //用户离开页面时

4.5 event object 对象

所有的事件函数都可以传入event参数方便处理事件

$("p").click(function(event){
alert(event.type); //"click"
}); (evnet object)属性方法:
event.pageX   //事件发生时,鼠标距离网页左上角的水平距离
event.pageY   //事件发生时,鼠标距离网页左上角的垂直距离
event.type   //事件的类型
event.which   //按下了哪一个键
event.data   //在事件对象上绑定数据,然后传入事件处理函数
event.target  //事件针对的网页元素
event.preventDefault()  //阻止事件的默认行为(比如点击链接,会自动打开新页面)
event.stopPropagation() //停止事件向上层元素冒泡

实例 拖动面板

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
.bar{
width: 250px;
height: 250px;
border: 1px solid gray;
position: absolute;
left: 10px;
right: 10px;
}
.bar .title{
height: 30px;
background-color: burlywood;
}
</style>
<script src="jquery-1.8.2.js"></script>
<script type="text/javascript">
$(function(){
$('#title').mouseover(function(){
$(this).css('cursor','move');
}).mousedown(function(e){
var _event = e || window.event;
var old_x = _event.clientX;
var old_y = _event.clientY; var box_x = $(this).parent().offset().left;
var box_y = $(this).parent().offset().top; $(this).bind('mousemove',function(e){
var _event = e || window.event;
var new_x = _event.clientX;
var new_y = _event.clientY; var new_box_x = box_x + (new_x - old_x);
var new_box_y = box_y + (new_y - old_y);
$(this).parent().css('left',new_box_x+'px');
$(this).parent().css('top',new_box_y+'px'); })
}).mouseup(function(){
$(this).unbind('mousemove');
})
}) </script>
</head>
<body>
<div class="bar">
<div class="title" id='title'>标题</div>
<div class="content">content</div>
</div>
</body>
</html>

demo

解决: 拖动面板鼠标移动过快,移动断开问题

绑定在div上 鼠标移出div层 事件就消失了,绑定在 document 上也就是整个页面都有这个事件!

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
.bar{
width: 250px;
height: 250px;
border: 1px solid gray;
position: absolute;
left: 10px;
right: 10px;
}
.bar .title{
height: 50px;
text-align: center;
border: 1px solid red;
background-color: burlywood;
cursor: move;
}
</style> </head>
<body> <div class="bar hide">
<div class="title" id='title'>标题</div>
<div class="content">content</div>
</div> <script src="jquery-2.1.4.min.js"></script>
<script type="text/javascript">
$(function(){ var MFloat = false;
var old_x,old_y;
var box_x,box_y; $('.title').on('mousedown',function(e){ var _event = e || window.event; old_x = _event.clientX;
old_y = _event.clientY; box_x = $('.title').parent().offset().left;
box_y = $('.title').parent().offset().top;
MFloat = true;
}) $(document).mouseover(function(e){
if(MFloat){
var _event = e || window.event;
var new_x = _event.clientX;
var new_y = _event.clientY; var new_box_x = box_x + (new_x - old_x);
var new_box_y = box_y + (new_y - old_y);
$('.title').parent().css('left',new_box_x+'px');
$('.title').parent().css('top',new_box_y+'px');
}
}).mouseup(function(){
MFloat = false;
})
}) </script>
</body>
</html>

demo

event.clientX、event.clientY

鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条。IE事件和标准事件都定义了这2个属性

event.pageX、event.pageY

类似于event.clientX、event.clientY,但它们使用的是文档坐标而非窗口坐标。这2个属性不是标准属性,但得到了广泛支持。IE事件中没有这2个属性。

event.offsetX、event.offsetY

鼠标相对于事件源元素(srcElement)的X,Y坐标,只有IE事件有这2个属性,标准事件没有对应的属性。

event.screenX、event.screenY

鼠标相对于用户显示器屏幕左上角的X,Y坐标。标准事件和IE事件都定义了这2个属性

【Python之路】第十四篇--jQuery-LMLPHP

input 输入框的change事件,要在input失去焦点的时候才会触发!

$('input[name=myInput]').change(function() { ... });

在输入框内容变化的时候不会触发change,当鼠标在其他地方点一下才会触发

用下面的方法会生效,input

$("#input_id").on('input',function(e){
alert('Changed!')
});

五 动画效果

5.1 基本  在动画完成后,可选地触发一个回调函数!

$("p").show()        //显示隐藏的匹配元素
$("p").show("slow"); //参数表示速度,("slow","normal","fast"),也可为900毫秒
$("p").hide()     //隐藏显示的元素
$("p").toggle();    //切换 显示/隐藏
$("p").stop() //停止所有在指定元素上正在运行的动画。

实例 显示与隐藏

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style></style>
<script src="jquery-1.8.2.js"></script>
<script type="text/javascript">
$(function(){
$('#hide').click(function(){
$('p').hide(1000);
})
$('#show').click(function(){
$('p').show(1000);
})
$('#toggle').click(function(){
$('p').toggle(1000);
})
})
</script>
</head>
<body>
<p style="background-color: pink;">hello</p>
<button id="hide">隐藏</button>
<button id="show">显示</button>
<button id="toggle">隐藏/显示</button>
</body>
</html>

demo

实例 回调函数

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style></style>
<script src="jquery-1.8.2.js"></script>
<script type="text/javascript">
$(function(){
$('#hide').click(function(){
$('p').hide(1000,function(){
alert(1);
});
})
$('#show').click(function(){
$('p').show(1000);
})
$('#toggle').click(function(){
$('p').toggle(1000);
})
})
</script>
</head>
<body>
<p style="background-color: pink;">hello</p>
<button id="hide">隐藏</button>
<button id="show">显示</button>
<button id="toggle">隐藏/显示</button>
</body>
</html>

demo

5.2 淡入淡出  在动画完成后,可选地触发一个回调函数!

$("p").fadeIn("900");        //用900毫秒时间将段落淡入
$("p").fadeOut("900");    //用900毫秒时间将段落淡出
$("p").fadeToggle("900");  //用900毫秒时间将段落淡入,淡出
$("p").fadeTo("slow", 0.6); //用900毫秒时间将段落的透明度调整到0.6

实例 淡入淡出

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script src="jquery-1.8.2.js"></script>
<script type="text/javascript">
$(function(){
$('#in').click(function(){
$('#id1').fadeIn(1000);
$('#id2').fadeIn(1000);
$('#id3').fadeIn(1000);
});
$('#out').click(function(){
$('#id1').fadeOut(1000);
$('#id2').fadeOut(1000);
$('#id3').fadeOut(1000);
});
$('#toggle').click(function(){
$('#id1').fadeToggle(1000);
$('#id2').fadeToggle(1000);
$('#id3').fadeToggle(1000);
});
$('#fadeto').click(function(){
$('#id1').fadeTo("slow", 0.6);
$('#id2').fadeTo("fast", 0.4);
$('#id3').fadeTo("slow", 0.2);
}); })
</script>
</head>
<body>
<button id="in">fadein</button>
<button id="out">fadeout</button>
<button id="toggle">fadetoggle</button>
<button id="fadeto">fadeto</button> <div id="id1" style="display:none; width: 80px;height: 80px;background-color: blueviolet"></div>
<div id="id2" style="display:none; width: 80px;height: 80px;background-color: orangered "></div>
<div id="id3" style="display:none; width: 80px;height: 80px;background-color: darkgreen "></div> </body>
</html>

demo

5.3 滑动  在动画完成后,可选地触发一个回调函数!

$("p").slideDown("900");    //用900毫秒时间将段落滑下
$("p").slideUp("900");  //用900毫秒时间将段落滑上
$("p").slideToggle("900"); //用900毫秒时间将段落滑上,滑下

实例 滑动

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
#flipshow,#content,#fliphide,#toggle{
padding: 5px;
text-align: center;
background-color: #ddd;
border:solid 1px red;
}
#content{
padding: 50px;
display: none;
}
</style>
<script src="jquery-1.8.2.js"></script>
<script>
$(function(){
$("#flipshow").click(function(){
$("#content").slideDown(1000);
});
$("#fliphide").click(function(){
$("#content").slideUp(1000);
});
$("#toggle").click(function(){
$("#content").slideToggle(1000);
})
}) </script>
</head>
<body>
<div id="flipshow">出现</div>
<div id="fliphide">隐藏</div>
<div id="toggle">toggle</div> <div id="content">helloworld</div>
</body>
</html>

demo

实例 京东轮播图

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
body{
margin: 0;
}
ul{
padding: 0;
margin: 0;
}
ul li{
list-style: none;
padding: 0;
}
.outer{
width:790px ;
height: 340px;
margin: 0 auto;
border: darkturquoise dashed 6px;
position: relative;
cursor: pointer;
}
.outer:hover .btn{
display: block;
}
.outer .img ul li img{
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
.outer .b-slider{
position: absolute;
bottom: 20px;
left: 50%;
margin-left: -10%;
cursor:default;
}
.outer .b-slider .num{
text-align: center;
border-radius: 25px;
font-size: 0;
background-color: hsla(0,0%,100%,.3);
height: 20px;
}
.outer .b-slider .num li{
display: inline-block;
width: 12px;
height: 12px;
border-radius: 100%;
background-color: white;
text-align: center;
margin: 4px 5px;
}
.outer .b-slider .num li.active{
background-color: #db192a;
}
.btn{
position: absolute;
top: 50%;
margin-top: -30px;
width: 30px;
height: 60px;
background: rgba(0,0,0,.1);
text-align: center;
line-height: 60px;
color: white;
font-weight: bolder;
display: none;
cursor: pointer;
}
.btn:hover{
background: rgba(0,0,0,.6);
}
.outer .right{
right: 0;
} </style>
<script src="jquery-2.2.3.min.js"></script>
<script type="text/javascript">
$(function(){ //生成底部标签:
var size = $('.img img').size();
for (var i= 1;i<=size;i++){
$('.b-slider .num').append('<li></li>');
} $('.num li').first().addClass('active');
$('.img li').first().show().siblings().hide(); $('.num li').mouseover(function(){
$(this).addClass('active').siblings().removeClass('active');
var index = $(this).index();
i = index;
$('.img li').eq(index).stop().fadeIn(500).siblings().stop().fadeOut(500);
}) var time = setInterval(move,3000);
i = 0;
function move(){
i++;
if(i==size){i=0;}
$('.num li').eq(i).addClass('active').siblings().removeClass('active');
$('.img li').eq(i).stop().fadeIn(500).siblings().stop().fadeOut(500);
} $('.outer').hover(function(){
clearInterval(time);
},function(){
time = setInterval(move,3000);
}); $('.right').click(function(){
move();
})
$('.left').click(function(){
if(i==0){i=size}
i=i-2;
move();
}) }) </script>
</head>
<body>
<div class="outer"> <div class="img">
<ul>
<li><a href="#"><img src="1.jpg" /></a></li>
<li><a href="#"><img src="2.jpg" /></a></li>
<li><a href="#"><img src="3.jpg" /></a></li>
<li><a href="#"><img src="4.jpg" /></a></li>
<li><a href="#"><img src="5.jpg" /></a></li>
<li><a href="#"><img src="6.jpg" /></a></li>
<li><a href="#"><img src="7.jpg" /></a></li>
<li><a href="#"><img src="8.jpg" /></a></li>
</ul>
</div> <div class="b-slider">
<ul class="num"></ul>
</div> <div class="btn left"> < </div>
<div class="btn right"> > </div> </div>
</body>
</html>

demo

实例 放大镜

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
*{
margin: 0;
padding: 0;
}
.outer{
position: relative;
}
.imgshow{
width: 430px;
height: 430px;
border: 5px cornflowerblue dashed;
position: relative;
overflow: hidden;
}
.imgzoom{
position: absolute;
left: 0;
top: 0;
width: 170px;
height: 170px;
background-color: gray;
opacity: 0.6;
display: none;
}
.bigshow{
border: 5px darkgreen solid;
position: absolute;
left: 440px;
top: 0;
width: 500px;
height: 500px;
overflow: hidden;
display: none;
}
.bigshow img{
position: absolute;
}
</style>
</head>
<body>
<div class="outer">
<div class="imgshow">
<div class="imgzoom"></div>
<img src="small.jpg" alt="" />
</div>
<div class="bigshow">
<img src="big.jpg" alt="" />
</div>
</div> <script src="jquery-1.8.2.js"></script>
<script type="text/javascript">
$(function(){ $('.imgshow').bind('mouseover',function(){
$('.imgzoom').css('display','block');
$('.bigshow').css('display','block');
});
$('.imgshow').bind('mouseout',function(){
$('.imgzoom').css('display','none');
$('.bigshow').css('display','none');
}); $('.imgshow').bind('mousemove',function(e){ var _event = e || window.event; var small_box_height = $('.imgshow').height();
var small_box_width = $('.imgshow').width(); var zoom_height = $('.imgzoom').height();
var zoom_width = $('.imgzoom').width(); var zoom_height_half = $('.imgzoom').height()/2 ;
var zoom_width_half = $('.imgzoom').width()/2 ; var mouse_left = _event.clientX;
var mouse_top = _event.clientY; var zoom_move_left = mouse_left - zoom_width_half;
var zoom_move_top = mouse_top - zoom_height_half; if(zoom_move_left < 0 ){
zoom_move_left = 0 ;
}else if(zoom_move_left > small_box_width - zoom_width){
zoom_move_left = small_box_width - zoom_width;
} if(mouse_top < zoom_height_half ){
zoom_move_top = 0 ;
}else if(zoom_move_top > small_box_height - zoom_height){
zoom_move_top = small_box_height - zoom_height ;
} $('.imgzoom').css('left',zoom_move_left+'px');
$('.imgzoom').css('top',zoom_move_top+'px'); var percentX = ( $('.bigshow img').width() - $('.bigshow').width() )/ (small_box_width - zoom_width)
var percentY = ( $('.bigshow img').height() - $('.bigshow').height() )/ (small_box_height - zoom_height) $('.bigshow img').css('left' , -percentX*zoom_move_left+'px');
$('.bigshow img').css('top' , -percentY*zoom_move_top+'px');
}) })
</script>
</body>
</html>

demo

实例 编辑框

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
.outer{
height: 50px;
}
.editMod{
padding: 10px;
background-color: gray;
text-decoration: none;
color: white;
}
.editing{
background-color: wheat;
color: red;
}
</style>
</head>
<body>
<div class="outer">
<button id="selectAll" onclick="selectAll('#editMod','#tb1');">全选</button>
<button id="reserve" onclick="reserve('#editMod','#tb1');">反选</button>
<button id="cancelAll" onclick="cancelAll('#editMod','#tb1');">取消</button>
<a href="javascript:void(0)" class="editMod" id="editMod" onclick="editing(this,'#tb1');">进入编辑模式</a>
</div> <table border="1">
<thead>
<tr>
<th>选择</th>
<th>主机名</th>
<th>端口</th>
<th>状态</th>
</tr>
</thead>
<tbody id="tb1">
<tr>
<td><input type="checkbox" /></td>
<td edit='true'>v1</td>
<td>v11</td>
<td edit='true' edit-type='select' select-value='1' global-key='STATUS' select-text='在线'>在线</td>
</tr>
<tr>
<td><input type="checkbox" /></td>
<td edit='true'>v2</td>
<td>v22</td>
<td edit='true' edit-type='select' select-value='2' global-key='STATUS' select-text='下线'>下线</td>
</tr>
<tr>
<td><input type="checkbox" /></td>
<td edit='true'>v3</td>
<td>v33</td>
<td edit='true' edit-type='select' select-value='1' global-key='STATUS' select-text='在线'>在线</td>
</tr>
</tbody>
</table> <script src="jquery-1.8.2.js"></script>
<script type="text/javascript">
STATUS = [
{'id':'1' , 'value':'在线'},
{'id':'2' , 'value':'下线'},
]
$(function(){
bindCheckbox('#editMod','#tb1'); }) window.globalCtrlKeyPress = false;
window.onkeydown=function(event){
if(event && event.keyCode == 17){
window.globalCtrlKeyPress = true;
}
}
window.onkeyup=function(event){
if(event && event.keyCode == 17){
window.globalCtrlKeyPress = false;
}
} function MulKeySelect(self){
if(window.globalCtrlKeyPress){
var index = $(self).parent().index();
var value = $(self).val();
$(self).parent().parent().nextAll().find("td input[type='checkbox']:checked").each(function(){
$(this).parent().parent().children().eq(index).children().val(value);
})
}
} function bindCheckbox(mode,tb){
$(tb).find(':checkbox').bind('click',function(){
var $tr = $(this).parent().parent();
if( $(mode).hasClass('editing') ){
if( $(this).prop('checked')){
RowIntoEdit($tr);
}else{
RowOutEdit($tr);
}
}
})
} function selectAll(mode,tb){
if( $(mode).hasClass('editing') ){ $(tb).children().each(function(){
var tr = $(this);
var check = tr.children().find(':checkbox');
if(check.prop('checked')){ }else{
check.prop('checked',true);
RowIntoEdit(tr);
}
})
}else{
$(tb).find(':checkbox').prop('checked',true);
}
}
function reserve(mode,tb){
if( $('#editMod').hasClass('editing') ){ $(tb).children().each(function(){
var tr = $(this);
var check = tr.children().first().find(':checkbox');
if(check.prop('checked')){
check.prop('checked',false);
RowOutEdit(tr);
}else{
check.prop('checked',true);
RowIntoEdit(tr);
}
}) }else{
$(tb).children().each(function(){
if($(this).find(':checkbox').prop('checked')){
$(this).find(':checkbox').prop('checked',false);
}else{
$(this).find(':checkbox').prop('checked',true);
}
}) }
}
function cancelAll(mode,tb){
if( $(mode).hasClass('editing') ){ $(tb).children().each(function(){
var tr = $(this);
var check = tr.children().find(':checked');
if(check.prop('checked')){
check.prop('checked',false);
RowOutEdit(tr);
}else{ }
})
}else{
$(tb).find(':checkbox').prop('checked',false);
}
}
function editing(self,tb){
if( $(self).hasClass('editing') ){
$(self).removeClass('editing');
$(tb).children().each(function(){
var tr = $(this);
var check_box = tr.children().first().find(':checkbox');
if(check_box.prop('checked')){
RowOutEdit(tr);
}else{ }
});
}else{
$(self).addClass('editing');
$(tb).children().each(function(){
var tr = $(this);
var check_box = tr.children().first().find(':checkbox');
if(check_box.prop('checked')){
RowIntoEdit(tr);
}else{ }
});
}
} function RowIntoEdit(tr){
tr.children().each(function(){
var td = $(this);
var edit_check = td.attr('edit');
if(edit_check == 'true' ){
var edit_type = td.attr('edit-type');
if(edit_type == 'select'){ var select_value = td.attr('select-value');
var global_key = td.attr('global-key');
var select_attr = { 'onchange' : 'MulKeySelect(this);'};
var select_css = "";
var temp = createSelect(attr=select_attr,css=select_css,option_dict=global_key,current_value=select_value);
td.html(temp); }else{
var text = td.text();
var temp = "<input type='text' value='"+text+"'/>"
td.html(temp);
}
}
})
}
function RowOutEdit(tr){
tr.children().each(function(){
var td = $(this);
var edit_check = td.attr('edit');
if(edit_check == 'true' ){
var edit_type = td.attr('edit-type');
if(edit_type == 'select'){ var select_val = td.children(':first').val();
var select_text = td.children(':first').find("option[select_value='"+select_val+"']").text();
td.attr('select-value',select_val);
td.attr('select-text',select_text);
td.text(select_text); }else{
var text = td.children().first().val();
td.text(text);
}
} })
}
function createSelect(attr,css,option_dict,current_value){ var sel = document.createElement('select'); $.each(attr, function(k,v) {
$(sel).attr(k,v);
});
$.each(css, function(k,v) {
$(sel).css(k,v);
}); //生成下拉选项:
$.each(window[option_dict], function(k,v) {
var select_num = v['id'];
var select_value = v['value'];
var opp = document.createElement('option'); if(current_value == select_num){ //默认值相同应该选中
$(opp).attr('select_value',select_num).attr('select-text',select_value).text(select_value).val(select_num).attr('selected',true).appendTo($(sel));
}else{
$(opp).attr('select_value',select_num).attr('select-text',select_value).text(select_value).val(select_num).appendTo($(sel));
} }); return sel;
} </script> </body>
</html>

demo

六 对象访问

$.trim()   //去除字符串两端的空格
$.each()   //遍历一个数组或对象,for循环
$.inArray() //返回一个值在数组中的索引位置,不存在返回-1
$.grep()   //返回数组中符合某种标准的元素
$.extend() //将多个对象,合并到第一个对象
$.makeArray() //将对象转化为数组
$.type() //判断对象的类别(函数对象、日期对象、数组对象、正则对象等等
$.isArray() //判断某个参数是否为数组
$.isEmptyObject() //判断某个对象是否为空(不含有任何属性)
$.isFunction() //判断某个参数是否为函数
$.isPlainObject() //判断某个参数是否为用"{}"或"new Object"建立的对象
$.support() //判断浏览器是否支持某个特性

循环:json对象:

$.each( data, function(k,v){ .... } )

return false  =>  break
return true => continue

判断空object对象:

function isEmptyObject(e) {
var t;
for(t in e)
return !1;
return !0;
}

七 插件扩展机制

//方式一    jQuery 可以简写成 $
jQuery.fn.extend({
hello:function(){
return $(this).text();
}
}); var index = $('.title').hello()
alert(index); <div class="title">1111</div>
<div class="title">2222</div>
//方式二
$.extend({
hello1 :function(arg){
var index = $(arg).text();
return index;
}
}) var index = $.hello1('.title')
alert(index) <div class="title">1111</div>
<div class="title">2222</div>

实例

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script src="jquery-1.8.2.js"></script>
<script type="text/javascript">
$(function(){
//方式一:
$.fn.extend({
hello:function(){
return $(this).text();
}
}); //方式二:
$.extend({
hello1 :function(arg){
var index = $(arg).text();
return index;
}
}) //方式一:
// var index = $('.title').hello()
// alert(index); //方式二:
var index = $.hello1('.title')
alert(index)
})
</script>
</head>
<body>
<div class="title">1111</div>
<div class="title">2222</div>
</body>
</html>

demo

八 补充

1.input 事件, 输入时触发:

$('#inp').on('input',function(){});

2.文件上传input  变更时触发:

$(".upload").on("change","input[type='file']",function(){
...
});

3.ajax异步请求页面时,必须返回数据,不能在后台指定跳转页面

4.判断是否存在该标签:

$('xxx').length > 0

5.DOM对象、JQ对象 转换

获取 Dom对象
document.getElementsTagName('div')[0] 获取 JQuery对象
$('div').first() Dom对象 => JQuery对象
$(document.getElementsTagName('div')[0]) JQuery对象 => Dom对象
$('div').first()[0]

6.JSON 转换

JSON.parse(arg)       字符串=>原型
JSON.stringify(arg) 原型=>字符串

练习题

demo 1:左侧菜单

【Python之路】第十四篇--jQuery-LMLPHP

demo 2:tab切换

【Python之路】第十四篇--jQuery-LMLPHP

demo 3:编辑框正反选

【Python之路】第十四篇--jQuery-LMLPHP

demo 4:返回顶部

【Python之路】第十四篇--jQuery-LMLPHP

demo 5:滚动菜单

【Python之路】第十四篇--jQuery-LMLPHP

demo 6:克隆方法的应用

【Python之路】第十四篇--jQuery-LMLPHP

demo 7:模态对话框

【Python之路】第十四篇--jQuery-LMLPHP

demo 8:拖动面板

【Python之路】第十四篇--jQuery-LMLPHP

demo 9:显示与隐藏

【Python之路】第十四篇--jQuery-LMLPHP

demo 10:淡入淡出

【Python之路】第十四篇--jQuery-LMLPHP

demo 11:滑动

【Python之路】第十四篇--jQuery-LMLPHP

demo 12:京东轮播图

【Python之路】第十四篇--jQuery-LMLPHP

demo 13:放大镜

demo 14:编辑框

【Python之路】第十四篇--jQuery-LMLPHP

04-13 15:02
查看更多