27、Python之jQuery基础
一、jQuery基础
jQuery是一个类库,类似于python中的模块,其封装了JavaScript对dom的操作,我们使用jQuery可以用更少的代码完成复杂的场景,而jQuery的内部本质上也是dom的操作。jQuery类库有3个系列,可以去jQuery的官网进行下载,然后使用<script src="jQuery的路径"></script>导入到我们的项目中,就可以使用了jQuery了。jquery的中文手册地址是:http://jquery.cuishifeng.cn/
1、jQuery对象和document对象的转换
jQuery[0] =====> Dom对象
Dom对象 ======>$(Dom对象) 调用jQuery类库时使用$符或jQuery。
2、元素查找
jQuery中常见的元素查找有:id,class,标签查找,组合查找,层级查找,基本查找,属性查找,表单查找,表单对象查找等,基本使用如下;
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 <div id="id">hello jquery 9 <div class="c1"> 10 <a></a> 11 </div> 12 <a></a> 13 <label>123</label> 14 <a id="a11">456</a> 15 </div> 16 <a id="a1">hello</a> 17 <a age></a> 18 <a age="18"></a> 19 20 <form id="f1"> 21 <input type="text"/> 22 <input type="password"/> 23 <input type="checkbox"/> 24 <input type="button"value="按钮"> 25 </form> 26 <script src="jquery-3.3.1.js"> 27 28 </script> 29 <script> 30 $('#id');//id查找 31 $('.c1');//class查找 32 $('div');//标签查找 33 $('#id,.c1,a');//组合查找 34 //----层级查找 35 $('#id a');//查找子子孙孙 36 $('#id>a');//查找儿子 37 //---基本查找 38 $('#id>a:first'); 39 $('#id>a:last'); 40 $('#id>a:eq(1)'); 41 //----属性查找 42 $('[age]'); 43 $('[age="18"]'); 44 //表单查找 45 $(':text'); 46 $(':password'); 47 $(':checkbox'); 48 $(':button'); 49 //表单对象属性查找 50 $(':checked'); //查找所有被选中的checkbox 51 </script> 52 </body> 53 </html>
jQuery实现多选,反选,取消操作实例。
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 <table id="tb" border="1" cellspacing="0" style="width: 300px"> 9 <thead> 10 <th>操作</th> 11 <th>IP</th> 12 <th>PORT</th> 13 </thead> 14 <tbody> 15 <tr> 16 <td><input type="checkbox"/></td> 17 <td>1.1.1.1</td> 18 <td>8080</td> 19 </tr> 20 <tr> 21 <td><input type="checkbox"/></td> 22 <td>1.1.1.1</td> 23 <td>8080</td> 24 </tr> 25 <tr> 26 <td><input type="checkbox"/></td> 27 <td>1.1.1.1</td> 28 <td>8080</td> 29 </tr> 30 <tr> 31 <td><input type="checkbox"/></td> 32 <td>1.1.1.1</td> 33 <td>8080</td> 34 </tr> 35 </tbody> 36 </table> 37 <input id="all_id" type="button" value="全选"/> 38 <input id="rev_id" type="button" value="反选"/> 39 <input id="canel_id" type="button" value="取消"/> 40 41 <script src="jquery-3.3.1.js"></script> 42 <script> 43 $('#all_id')[0].onclick = function(){ 44 $('#tb :checkbox').prop('checked',true); 45 } 46 47 $('#canel_id')[0].onclick = function () { 48 $('#tb :checkbox').prop('checked',false); 49 } 50 51 $('#rev_id')[0].onclick = function () { 52 $('#tb :checkbox').each(function () { 53 $(this).prop('checked',!$(this).prop('checked')); 54 // this.checked = !this.checked; 55 }) 56 } 57 </script> 58 </body> 59 </html>
其中prpo是专门用于checkbox,radio属性设置,each方法是jQuery内置循环。$('#tb :checkbox').each(function(k){ //k当前索引 //this当前循环的元素})。
3、筛选(next(), nextAll(), nextUntil(), prev(), prevAll(), prevUntil(), parent(), parents(), parentsUntil(), children(), siblings(), find(), $('#id').eq(index), $('#id:eq(index)'), first(), last())
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 <div> 9 <a id="i2"></a> 10 <a>asdf</a> 11 <a>asdf</a> 12 <a id='i1' class="c1">asdf</a> 13 <a>asdf</a> 14 <a id='ii1'>asdf</a> 15 <a>asdf</a> 16 </div> 17 18 <script src="jquery-3.3.1.js"> 19 20 </script> 21 <script> 22 $('#i1').next();//下一个元素 23 $('#i1').nextAll(); //下面所有元素 24 $('#i1').nextUntil('#ii1');//直到#ii1,不包含#ii1 25 $('#i1').prev(); //前一个元素 26 $('#i1').prevAll(); //前面所有元素 27 $('#i1').prevUntil("#i2"); //前面的元素 直到i2 28 $('#i1').parent();//父标签 29 $('#i1').parents(); //所有父标签 30 $('#i1').parentsUntil('#id'); //查找所有父标签直到id 31 $('#i1').children(); //查找所有孩子 32 $('#i1').siblings(); //查询所有兄弟 33 $('#i1').find(); //查询子子孙孙 34 $('#i1:eq(1)'); //查找第一个元素 35 $('#i1').eq(1); //查找第一个元素 36 $('#i1').first(); //查找第一个元素 37 $('#i1').hasClass('c1'); //查找是否有某个类 38 </script> 39 </body> 40 </html>
4、文本操作(text(),html(),val())
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 <a id="id">12345</a> 9 <input type="text" value="1234"/> 10 11 <script src="jquery-3.3.1.js"> 12 13 </script> 14 <script> 15 $('#id').text(); //获取值 16 $('#id').text('sdds'); //设置值 17 $(':text').val();//获取值 18 $(':text').val('sfsf');//设置值 19 $('#id').html('<a>1</a>'); //设置html 20 $('#id').html(); //获取html 21 </script> 22 </body> 23 </html>
5、类操作(addClass(),removeClass(),toggleClass())
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 </style> 11 </head> 12 <body> 13 <a id="id">12345</a> 14 <script src="jquery-3.3.1.js"> 15 16 </script> 17 <script> 18 $('#id').addClass('hide');//添加类 19 $('#id').removeClass('hide');//删除类 20 $('#id').toggleClass('hide');//如果有就删除 如果没有就添加 21 </script> 22 </body> 23 </html>
实例展示,tab菜单
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <style> 7 8 .content_active{ 9 background: #7dddff; 10 } 11 .active{ 12 background: #3f49e1; 13 } 14 .menu{ 15 height: 48px; 16 background: #dddddd; 17 line-height: 48px; 18 } 19 .menu .item{ 20 float: left; 21 margin-left: 80px; 22 padding-left: 40px; 23 padding-right: 40px; 24 cursor: pointer; 25 26 width: 50px; 27 /*background: #cadd66;*/ 28 } 29 .hide{ 30 display: none; 31 } 32 .content { 33 height: 300px; 34 width: 698px; 35 border: 1px solid darkgray; 36 } 37 </style> 38 </head> 39 <body> 40 <div style="width: 700px;margin: 0 auto"> 41 <div class="menu"> 42 <div target='1' class="item active">菜单一</div> 43 <div target='2' class="item">菜单二</div> 44 <div target='3' class="item">菜单三</div> 45 </div> 46 <div> 47 <div name='1' class="content">内容fdfdfdfdfdfds一</div> 48 <div name='2' class="content hide"><input type="button" value="点我"/></div> 49 <div name='3' class="content hide">内容sdffffff三</div> 50 </div> 51 </div> 52 53 <script src="jquery-3.3.1.js"></script> 54 55 <script> 56 $('.item').click(function(){ 57 $(this).addClass('active').siblings().removeClass('active'); 58 // var attr = $(this).attr('target'); 59 // var temp = ".content[name="+attr+"]"; 60 // $(temp).removeClass('hide'); 61 // $(temp).siblings().addClass('hide'); 62 //利用索引完成 63 $('.content').eq($(this).index()).removeClass('hide').siblings().addClass('hide'); 64 }) 65 </script> 66 </body> 67 </html>
6、属性操作(attr(),removeAttr(),prpo())
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 </style> 11 </head> 12 <body> 13 <a id="id">12345</a> 14 <input type="radio" value="k"/> 15 <script src="jquery-3.3.1.js"> 16 17 </script> 18 <script> 19 //专门用于自定义属性 20 $('#id').attr('class'); //获取属性值 21 $('#id').attr('class','hide'); //设置属性,可以是自定义属性 22 $('#id').removeAttr('class'); //删除属性 23 //专门用于checbox,radio一类 24 $(':radio').prop('checked'); //获取属性值 25 $(':radio').prop('checked',true); //设置 26 </script> 27 </body> 28 </html>
7、文档处理(append(), prepend(), after(), before(), empty())
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 </style> 11 </head> 12 <body> 13 <div id="i1">1233</div> 14 <script src="jquery-3.3.1.js"> 15 16 </script> 17 <script> 18 $('#i1').append('<div>123</div>'); //在儿子节点最后插入一个子元素 19 $('#i1').prepend('<div>456</div>>'); //在儿子节点最前面插入一个子元素 20 $('#i1').after('<div>1111</div>'); //在该元素后面插入一个子元素 21 $('#i1').before('<div>4444</div>'); //在该元素前面插入一个老师 22 $('#i1').empty();//清空元素的内容 23 </script> 24 </body> 25 </html>
8、css处理 $('#i1').css({'height':'200px','width':'100px','background':'blue'})
点赞实例演示。
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <style> 7 .container{ 8 padding: 50px; 9 border: 1px solid darkgray; 10 } 11 .container .item{ 12 height: 40px; 13 width: 40px; 14 line-height: 40px; 15 text-align: center; 16 position: relative; 17 cursor: pointer; 18 /*border: 1px solid red;*/ 19 } 20 </style> 21 </head> 22 <body> 23 <div class="container"> 24 <div class="item"> 25 <span>赞</span> 26 </div> 27 </div> 28 29 <script src="jquery-3.3.1.js"></script> 30 31 <script> 32 $('.item').click(function () { 33 var span = document.createElement("span"); 34 var fontSize = 15; 35 var right = 0; 36 var top = 0; 37 var opacity = 1; 38 $(span).text("+1"); 39 $(span).css('position','absolute'); 40 $(span).css('right',right); 41 $(span).css('top',top); 42 $(span).css('fontSize',fontSize+"px"); 43 $(span).css('color',"green"); 44 $(span).css('opacity',opacity); 45 $(this).append(span); 46 var obj = setInterval(function() { 47 fontSize = fontSize+5; 48 right = right-10; 49 top = top -10; 50 opacity = opacity - 0.1; 51 $(span).css('right',right); 52 $(span).css('top',top); 53 $(span).css('fontSize',fontSize+"px"); 54 $(span).css('color',"green"); 55 $(span).css('opacity',opacity); 56 if(opacity<0) { 57 clearInterval(obj); 58 $(span).remove(); 59 } 60 },100); 61 }); 62 </script> 63 </body> 64 </html>
9、位置($(window).scrollTop() offset().left offset().top, position().top, position().left $('#id').height(), $('#id').innerHeight(), $('#id').outerHeight())
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <style> 7 #i1{ 8 height: 100px; 9 width: 100px; 10 overflow: auto; 11 position: relative; 12 } 13 #i2{ 14 position: absolute; 15 height: 50px; 16 width: 50px; 17 background: #ff6600; 18 left: 10px; 19 20 } 21 </style> 22 </head> 23 <body style="height: 5000px"> 24 <div id="i1"> 25 <div id="i2">2121</div> 26 <p>ddsdds</p> 27 <p>ddsdds</p> 28 <p>ddsdds</p> 29 <p>ddsdds</p> 30 <p>ddsdds</p> 31 </div> 32 <script src="jquery-3.3.1.js"> 33 34 </script> 35 <script> 36 $(window).scrollTop(); //获取滚动条的位置 37 $(window).scrollTop(10);//设置滚动条的位置 38 $('#i1').scrollTop(); //获取div滚动条的位置 39 $('#i1').scrollTop(10); //设置div滚动条的位置 40 $('#i1').offset(); //div坐标位置 41 $('#i2').position(); //div的position位置 42 </script> 43 </body> 44 </html>
下面我们通过一个图来理解height(),innerHeight(),outerHeight(false),outerHeight(true)。
控件拖拽实例演示。
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <style> 7 8 #moveBar{ 9 position: absolute; 10 } 11 #banner{ 12 13 height: 48px; 14 width: 300px; 15 background: #ff6600; 16 line-height: 48px; 17 text-align: center; 18 cursor: move; 19 user-select:none;/*用户无法选择文本*/ 20 21 } 22 #content{ 23 position: absolute; 24 top: 48px; 25 height: 200px; 26 width: 298px; 27 border: 1px solid darkgray; 28 } 29 </style> 30 </head> 31 <body> 32 <div id="moveBar"> 33 <div id="banner">标题</div> 34 <!--<div id="d1" style="z-index: 2">标题</div>--> 35 <div id="content"><textarea style="width: 292px;height: 194px;">编辑</textarea> </div> 36 </div> 37 38 <script src="jquery-3.3.1.js"></script> 39 40 <script> 41 $(function () { 42 $('#banner').mousedown(function(e) { 43 var isMove = true; 44 var div_x = e.pageX - $('#moveBar').offset().left; 45 var div_y = e.pageY - $('#moveBar').offset().top; 46 $(document).mousemove(function(e) { 47 if(isMove){ 48 var tem_x = e.pageX - div_x; 49 var tem_y = e.pageY - div_y; 50 $('#moveBar').css('left',tem_x); 51 $('#moveBar').css('top',tem_y); 52 } 53 }).mouseup(function () { 54 isMove= false; 55 }) 56 }); 57 58 }); 59 60 </script> 61 </body> 62 </html>
10、jQuery事件绑定(click(), [bind()--unbind()], [on()--off()], [delegate()---undelegate()托管])
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <style> 7 #i1{ 8 height: 100px; 9 width: 100px; 10 background: #ff6600; 11 } 12 13 </style> 14 </head> 15 <body> 16 <div id="i1"> 17 事件绑定 18 </div> 19 20 <input type="button" value="+"/> 21 <script src="jquery-3.3.1.js"> 22 23 </script> 24 <script> 25 $('div').click(function(e) { 26 console.log(this); 27 alert('hi'); 28 }); 29 30 $('div').bind('click',function(e) { 31 console.log(this); 32 alert('bind'); 33 }); 34 35 $('div').on('click',function (e) { 36 alert('on'); 37 }); 38 //托管----该绑定事件的方式不同于其他三种的原因是:其在事件触发的时候才会绑定事件,看下面的列子 39 $(document).delegate('div','click',function () { 40 alert('delegate'); 41 }); 42 43 //---------以下实例展示了托管不同于其他事件绑定的方法 44 45 $(':button').click(function (e) { 46 $('body').append('<div>新增的div</div>'); 47 }) 48 //点击+按钮生成新的div,此时点击新的div 只有delegate绑定的事件能响应 49 </script> 50 </body> 51 </html>
最后需要提醒的是,我们希望在页面框架加载完成之后就能够自动执行jQuery代码,此时,我们一般会将代码放在
$(function()){
$(....) //我们的jQuery代码
}
11、阻止事件发生
我们知道,对于一个<a href='http://www.baidu.com'></a>标签而言,其默认有一个鼠标点击跳转时间,那么,如果我们给这个a标签绑定一个click时间,会肿么样呢?一起看下面的例子。
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 7 </head> 8 <body> 9 <a href="http://www.baidu.com">百度一下</a> 10 11 12 <script src="jquery-3.3.1.js"> 13 14 </script> 15 <script> 16 $('a').click(function () { 17 alert(1); 18 return true; //false时不会跳转 为true时会跳转 19 }); 20 </script> 21 </body> 22 </html>
通过上面的例子,我们发现如果我们自己绑定的事件return false时,标签自己默认的事件就失效,反之,如果我们返回true,则在响应完我们自己的事件之后,再去响应默认的事件。这种机制,使我们想起在表单提交的时候可以做一些必要的校验。辣么,我们就看一下表单提交的代码演示。
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <style> 7 .error{ 8 color: red; 9 } 10 </style> 11 </head> 12 <body> 13 <form action="5.html" method="post"> 14 <div><input type="text"/></div> 15 <div><input type="text"/></div> 16 <div><input type="text"/></div> 17 <div><input type="password"/></div> 18 <input type="submit" value="提交"/> 19 </form> 20 <div style="height: 600px;width: 600px;border: 1px solid darkgray"> 21 <img height="600px" width="600px" src="http://img.ivsky.com/img/tupian/pre/201803/15/fangsuo_shudian-022.jpg"/> 22 </div> 23 <script src="jquery-3.3.1.js" ></script> 24 25 <script> 26 $(function () { //当页面框架加载完成后,自动执行 27 $(':submit').bind('click',function () { 28 var flag = true; 29 $('.error').remove(); 30 $(':text,:password').each(function () { 31 var val = $(this).val(); 32 if(val.trim().length<=0){ 33 flag = false; 34 if($(this).parent().find('span').length<=0){ 35 var tag = document.createElement('span'); 36 $(tag).text('*必填'); 37 $(tag).addClass('error'); 38 $(this).after(tag); 39 } 40 } 41 }); 42 return flag; 43 }); 44 }); 45 </script> 46 </body> 47 </html>