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;width: 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 width: 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="width: 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="width: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 width: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;width: 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) #或者传 $,实参是将参数传递给自执行函数