Python自动化 【第十七篇】:jQuery介绍
jQuery
jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多),对javascript进行了封装,是的更加便捷的开发,并且在兼容性方面十分优秀。
http://www.php100.com/manual/jquery/ jQuery 1.12中文文档
jQuery和dom之间的转换关系:
jQuery对象[0] => Dom对象
Dom对象 => $(Dom对象)
查找元素:引入jQuery后用$调用其方法
1.选择器,直接找到某个或者某类标签
1.1 id
$('#id') #通过id找到对应标签
1.2. class
<div class='c1'></div>
$(".c1") #通过class找到对应标签
1.3. 标签
$('a') #找到所有的a标签
1.4 组合查找
$('a') #找到所有的a标签
$('.c2') #找到所有的class=c2的标签
$('a,.c2,#i10') #找到所有的a标签和class=c2的标签以及id=i10的标签
1.5 层级查找
$('#i10 a') #子子孙孙(匹配id=i10的标签下面所有的a标签)
$('#i10>a') #只匹配子标签(只匹配id=i10的标签子标签中的a标签)
1.6 基本选择器
:first #匹配符合要求的所有标签的第一个标签
:last #匹配符合要求的所有标签的最后一个标签
:eq(index) #通过索引匹配,index从0开始
1.7 属性
$('[tony]') #具有tony属性的所有标签
$('[tony="123"]') #tony属性等于123的标签
$("input[type='text']") #先匹配标签后匹配属性
$(':text') #简写(匹配所有的text属性)
实例:多选,反选,全选
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 <input type="button" value="全选" onclick="checkAll();"> 9 <input type="button" value="反选" onclick="reverseAll();"> 10 <input type="button" value="取消" onclick="cancleAll();"> 11 <table border="1"> 12 <thead> 13 <tr> 14 <th>请选择</th><th>IP</th><th>Port</th> 15 </tr> 16 </thead> 17 <tbody id="tb"> 18 <tr> 19 <td><input type="checkbox"></td> 20 <td>1.1.1.1</td> 21 <td>80</td> 22 </tr> 23 <tr> 24 <td><input type="checkbox"></td> 25 <td>1.1.1.1</td> 26 <td>80</td> 27 </tr> 28 <tr> 29 <td><input type="checkbox"></td> 30 <td>1.1.1.1</td> 31 <td>80</td> 32 </tr> 33 </tbody> 34 </table> 35 <script src="jquery-1.12.4.js"></script> 36 <script> 37 function checkAll() { 38 $('#tb :checkbox').prop('checked',true); 39 } 40 function cancleAll() { 41 $('#tb :checkbox').prop('checked',false); 42 } 43 function reverseAll() { 44 /*$('#tb :checkbox').each(function () { 45 var v = $(this).prop('checked')?false:true; 46 $(this).prop('checked',v); 47 });*/ 48 $('#tb :checkbox').each(function () { 49 // dom操作: 50 // if(this.checked){ 51 // this.checked = false; 52 // }else{this.checked = true;} 53 54 // jQuery操作: 55 // if ($(this).prop('checked')){ 56 // $(this).prop('checked',false); 57 // }else{$(this).prop('checked',true);} 58 59 // 三元运算: 60 var v = $(this).prop('checked')?false:true; 61 $(this).prop('checked',v);});} 62 </script> 63 </body> 64 </html>
1.8对checkbox标签的操作(prop方法):
- $('#tb:checkbox').prop('checked'); #不传值表示获取值
- $('#tb:checkbox').prop('checked', true); #传值表示设置值为true
1.9 jQuery方法内置循环:
- $('#tb :checkbox').xxxx (xxxx为直接做操作),例如:
$('#tb :checkbox').prop('checked', true) #给匹配到的每一个chackbox标签加上checked属性为true
或者.each() 内套函数:
- $('#tb :checkbox').each(function(k){
// k为当前索引
// this,DOM对象(代指当前循环的元素),$(this)转换成jQuery对象
})
三元运算:
- var v = 条件 ? 真值 : 假值 (若条件成立则v为true,否则false)
2.筛选:
$('#i1').next() #获取当前标签的下一个标签
$('#i1').nextAll() #获取当前标签的下边所有标签
$('#i1').nextUntil('#i2') #获取当前标签以下直到id为i2的标签
$('#i1').prev() #上一个
$('#i1').prevAll()
$('#i1').prevUntil('#i2')
$('#i1').parent() #父标签
$('#i1').parents()
$('#i1').parentsUntil()
$('#i1').children() #子标签
$('#i1').siblings() #获取当前标签的所有同级(兄弟)标签
$('#i1').find(‘#c1’) #匹配当前标签所有子孙标签中class=c1的标签
代码示例:(筛选器)
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <style> 7 .c1 {border: 1px solid #DDDDDD; 8 height: 400px; 200px;} 9 .item {color:white;} 10 .hide {display: none;} 11 </style> 12 </head> 13 <body class="c1"> 14 <div> 15 <div class="item">标题一</div> 16 <div class="content">内容一</div> 17 </div> 18 <div> 19 <div class="item">标题二</div> 20 <div class="content hide">内容二</div> 21 </div> 22 <div> 23 <div class="item">标题三</div> 24 <div class="content hide">内容三</div> 25 </div> 26 <script src="jquery-1.12.4.js"></script> 27 <script> 28 $('.item').click(function () { 29 $(this).next().removeClass('hide').parent().siblings().find('.content').addClass('hide'); 30 // $(this).next().removeClass('hide'); 31 // $(this).parent().siblings().find('.content').addClass('hide') 32 }) 33 </script> 34 </body> 35 </html>
$('li:eq(1)') #选择器都由字符串包裹
$('li').eq(1) #筛选器查找
first()
last()
hasClass(class) #是否具有样式
3.文本操作:
$(..).text() # 获取文本内容
$(..).text("<a>1</a>") # 设置文本内容
$(..).html()
$(..).html("<a>1</a>")
$(..).val() ## 获取表单内容
$(..).val(..) ## 设置表单内容
4.样式操作:
addClass #添加样式
removeClass #移除样式
toggleClass #设置开关样式效果
5.属性操作:
# 专门用于做自定义属性 *****
$(..).attr('n') #获取属性值
$(..).attr('n','v') #设置属性值
$(..).removeAttr('n') #删除属性
<input type='checkbox' id='i1' />
# 专门用于chekbox,radio *****
$(..).prop('checked') #获取值
$(..).prop('checked', true) #设置值
模态对话框代码示例:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <style> 7 .hide { 8 display: none; 9 } 10 .modal { 11 position: fixed; 12 400px; 13 height: 200px; 14 15 top:50%; 16 left:50%; 17 margin-left: -250px; 18 margin-top: -200px; 19 z-index: 10; 20 } 21 .shadow { 22 position: fixed; 23 top:0; 24 right:0; 25 bottom:0; 26 left:0; 27 background-color: black; 28 opacity: 0.6; 29 z-index: 9; 30 } 31 .edit { 32 border-radius:2px; 33 border: 2px outset white; 34 cursor: pointer; 35 } 36 </style> 37 </head> 38 <body> 39 <div class="modal hide"> 40 <div style=" 250px;height: 150px;margin: 20px auto;"> 41 Host:<input name="hostname" type="text"><p></p> 42 Port:<input name="port" type="text"><p></p> 43 IP:<input name="IP" type="text"> 44 <p></p> 45 <input style="margin-left: 75px;" type="button" value="确定"> 46 <input id="i2" type="button" value="取消"> 47 </div> 48 </div> 49 <div class="shadow hide"></div> 50 <input id="i1" type="button" value="添加" > 51 <input type="button" value="全选" onclick="checkAll();"> 52 <input type="button" value="反选" onclick="reverseAll();"> 53 <input type="button" value="取消" onclick="cancleAll();"> 54 <table border="1"> 55 <thead> 56 <tr> <th>HostName</th><th>Port</th><th>IP</th><th>操作</th> 57 </tr> 58 </thead> 59 <tbody id="tb"> 60 <tr> 61 <td target="hostname">1.1.1.1</td> 62 <td target="port">80</td> 63 <td target="IP">80</td> 64 <td> 65 <input type="button" class="edit" value="编辑"/>|<a>删除</a> 66 </td> 67 </tr> 68 <tr> 69 <td target="hostname">1.1.1.2</td> 70 <td target="port">80</td> 71 <td target="IP">80</td> 72 <td> 73 <input type="button" class="edit" value="编辑"/>|<a>删除</a> 74 </td> 75 </tr> 76 <tr> 77 <td target="hostname">1.1.1.3</td> 78 <td target="port">80</td> 79 <td target="IP">80</td> 80 <td> 81 <input type="button" class="edit" value="编辑"/>|<a>删除</a> 82 </td> 83 </tr> 84 </tbody> 85 </table> 86 <script src="jquery-1.12.4.js"></script> 87 <script> 88 $('#i1').click(function () { 89 $('.modal,.shadow').removeClass('hide') 90 }); 91 $('#i2').click(function () { 92 $('.modal,.shadow') .addClass('hide') 93 $('.modal input[name="hostname"]').val(""); 94 $('.modal input[name="port"]').val(""); 95 $('.modal input[name="IP"]').val(""); 96 }); 97 $('.edit').click(function () { 98 $('.modal,.shadow').removeClass('hide'); 99 var tds = $(this).parent().prevAll(); 100 tds.each(function () { 101 var n = $(this).attr('target'); 102 var text = $(this).text(); 103 $('.modal input[name="'+n+'"]').val(text) 104 });}); 105 </script> 106 </body> 107 </html>
TAD切换菜单代码示例:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <style> 7 .menu { 8 height: 38px; 9 line-height: 38px;} 10 .menu-item { 11 float: left; 12 border-right: 1px solid red; 13 padding: 0 10px; 14 cursor: pointer;} 15 .active { 16 } 17 .hide { 18 display: none;} 19 </style> 20 </head> 21 <body> 22 <div style="700px;margin: 100px auto;height: 500px;"> 23 <div class="menu"> 24 <div class="menu-item active" a="1">菜单一</div> 25 <div class="menu-item" a="2">菜单二</div> 26 <div class="menu-item" a="3">菜单三</div> 27 </div> 28 <div class="content" style="height: 300px;border: 1px solid #DDDDDD"> 29 <div b="1">内容一</div> 30 <div class="hide" b="2">内容二</div> 31 <div class="hide" b="3">内容三</div> 32 </div> 33 </div> 34 <script src="jquery-1.12.4.js"></script> 35 <script> 36 $('.menu-item').click(function(){ 37 $(this).addClass('active').siblings().removeClass('active'); 38 $(".content").children().eq($(this).index()).removeClass('hide').siblings().addClass('hide') 39 }); 40 </script> 41 </body> 42 </html>
PS: index 获取索引位置
6.文档处理:
append #在匹配标签的内部最下边添加标签
prepend #在匹配标签的内部最上边添加标签
after #在匹配标签外部后边追加标签
before #在匹配标签外部前边追加标签
remove #删除某个标签
empty #清空标签内容,标签不删除
clone #复制一个标签
7.css处理
$('.t1').css('样式名称', '样式值')
点赞代码示例:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <style> 7 .container {padding: 50px; 8 border:1px solid #DDDDDD;} 9 .content {position: relative; 10 30px;} 11 </style> 12 </head> 13 <body> 14 <div class="container"> 15 <div class="content"> 16 <span>赞</span> 17 </div> 18 </div> 19 <div class="container"> 20 <div class="content"> 21 <span>赞</span> 22 </div> 23 </div> 24 <script src="jquery-1.12.4.js"></script> 25 <script> 26 $('.content').click(function () { 27 addFavor(this);}); 28 function addFavor(self) { 29 var fontsize = 15; 30 var top = 0; 31 var right = 0; 32 var opacity = 1; 33 var tag = document.createElement('i'); 34 $(tag).text('+1'); 35 $(tag).css('color','green'); 36 $(tag).css('position','absolute'); 37 $(tag).css('fontsize',fontsize + 'px'); 38 $(tag).css('top',top + 'px'); 39 $(tag).css('right',right + 'px'); 40 $(tag).css('opacity',opacity); 41 $(self).append(tag); 42 var obj = setInterval(function () { 43 fontsize = fontsize + 10; 44 top -= 10;right -= 10;opacity -= 0.2; 45 $(tag).css('fontSize',fontsize + 'px'); 46 $(tag).css('top',top + 'px'); 47 $(tag).css('right',right + 'px'); 48 $(tag).css('opacity',opacity); 49 if (opacity < 0) { 50 clearInterval(obj); 51 $(tag).remove();}},100)} 52 </script> 53 </body> 54 </html>
上例用到的方法:
- $('.t1').append()
- $('.t1').remove()
- setInterval #设置定时时间
- 透明度 1 ==> 0
- position
- 字体大小,位置
8.位置:
$(window).scrollTop() #获取位置(高度)信息
$(window).scrollTop(0) #设置像素高度
scrollLeft([val])
offset().left #指定标签在html中的坐标
offset().top #指定标签在html中的坐标
position() #指定标签相对父标签(relative标签)的坐标
移动面板代码示例:
1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <title></title> 6 </head> 7 <body> 8 <div style="border: 1px solid #ddd; 600px;position: absolute;"> 9 <div id="title" style="height: 40px;"></div> 10 <div style="height: 300px;"></div> 11 </div> 12 <script type="text/javascript" src="jquery-1.12.4.js"></script> 13 <script> 14 $(function(){ 15 $('#title').mouseover(function(){ 16 $(this).css('cursor','move'); 17 }).mousedown(function(e){ 18 //console.log($(this).offset()); 19 var _event = e || window.event; 20 var ord_x = _event.clientX; 21 var ord_y = _event.clientY; 22 var parent_left = $(this).parent().offset().left; 23 var parent_top = $(this).parent().offset().top; 24 $(this).bind('mousemove', function(e){ 25 var _new_event = e || window.event; 26 var new_x = _new_event.clientX; 27 var new_y = _new_event.clientY; 28 var x = parent_left + (new_x - ord_x); 29 var y = parent_top + (new_y - ord_y); 30 $(this).parent().css('left',x+'px'); 31 $(this).parent().css('top',y+'px');}) 32 }).mouseup(function(){ 33 $(this).unbind('mousemove');});}) 34 </script> 35 </body> 36 </html>
9.事件
DOM:四种绑定方式
- $('.c1').click()
$('.c1').....
- $('.c1').bind('click',function(){
})
- $('.c1').unbind('click',function(){
})
- $('.c').delegate('a', 'click', function(){
}) #委托(delegate)(新添加的标签也可以通过该方法绑定时间)
- $('.c').undelegate('a', 'click', function(){
})
- $('.c1').on('click', function(){
})
- $('.c1').off('click', function(){
})
阻止事件发生
return false
# 当页面框架加载完成之后,自动执行
$(function(){
$(...) #在function里面执行jQuery操作
})
10.jQuery扩展:
- $.extend 执行: $.方法
- $.fn.extend 执行:$(..).方法
第一种调用方法示例:
1 <script src="jquery-1.12.4.js"></script> 2 <script> 3 // $('#i1').css(); 4 // $.ajax(); 5 // jQuery扩展 6 $.extend({ 7 'test':function () { 8 return 'success';}}); 9 $.text(); //直接调用test方法 10 </script>
第二种调用方法示例:
1 <script src="jquery-1.12.4.js"></script> 2 <script> 3 $.fn.extend({ 4 'test':function () { 5 return 'success';}}); //必须是$.fn.extend() 6 $('#i1').text(); //必须选中某个标签后才可以调用 7 </script>
还可以上网找各种jQuery扩展,解决不同jQuery之间(插件和插件间)全局变量和函数名称冲突的方法(将变量和函数封装在自执行函数里):
(function(arg){
var status = 1;
// 封装变量
})(jQuery) #或者传 $,实参是将参数传递给自执行函数