Python web前端 09 jQuery
Python web前端 09 jQuery
一、三个重要网址
http://jquery.cuishifeng.cn/ #中文查询网站 http://www.bootcdn.cn/ #引入jq http://api.jquery.com/ #官网 #jQuery是一种新的JavaScript库;jq是js写的,能用jq实现的,js都能实现;js能实现的,jq有些不能实现。 #jQuery $ 符号传字符串、选择器、尖括号标签的形式、函数、对象(object) #jq的API只对自己开放,jq不能用js的API,js也不能用jq的API #jQuery引入方法 <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script> #通过网页引入 <script src="jquery.js"></script> #将代码复制到本地,通过本地连接引入 #验证是否已引入 $(function(){alert(1);})#在一个新的script里面验证弹窗
二、jQuery
获取元素
var oBox=document.getElementById("#box"); #js获取元素 oBox.innerHTML="div++"; #js修改元素 var $box=$("#box"); #jq获取id元素 $box.html="div++"; #jq修改元素 $box.html("<em>div++</em>");#加粗内容 var $p=$("p");#jq获取标签
jq、js的互相转换
js---->jq var oBox=document.getElenmentById("box"); oBox.innerHTML="888"; $(oBox).html("999");#在js对象前加个$符号即可将js转化为jq jq---->js var $p=$("#box p"); $p.html("999"); $p[2].innerHTML="666";#在jq对象后面加个索引(转化为js)的后缀即可转化 $p.get(2).innerHTML="666";#这种方法(转化为js)也可以 jq----->特定的jq var $p=$("#box p"); $p.eq(1).html("888");#仍然是jq
js---->jq var oBox=document.getElenmentById("box"); oBox.innerHTML="888"; $(oBox).html("999");#在js对象前加个$符号即可将js转化为jq jq---->js var $p=$("#box p"); $p.html("999"); $p[2].innerHTML="666";#在jq对象后面加个索引(转化为js)的后缀即可转化 $p.get(2).innerHTML="666";#这种方法(转化为js)也可以 jq----->特定的jq var $p=$("#box p"); $p.eq(1).html("888");#仍然是jq
jq的遍历
<div id="box"> <p>1</p> <p>2</p> <p>3</p> <p>4</p> </div> <script src="jQuery.js"></script> <script> $("#box p").each(function (i) { this.innerHTML="我是第"+i+"个";用js方法完成遍历 $(this).html("我是第"+i+"个")#用jq方法完成遍历 }); </script>
jq操作属性
attr #设置、获取 标签属性 removeattr #移除标签属性 addClass removeClass #传class 移除你传的那个 #没有 移除全部 toggleClass #有就删除没有就添加 #操作class类名 jq js html() innerHTML text() innerTEXT val() value #在jq里面,设置某个值的时候一般都是自带遍历,获取某个值的时候一般都是获取第一个 <div id="box" class="box"> <p class="on">1</p> <p class="show">2</p> <p>3</p> </div> <script src="jQuery.js"></script> <script> var $box=$("box"); $box.attr("class","xiaopo");#添加class="xiaopo",将原来的class覆盖掉 $box.attr("py","xp");#添加py="xp" $box.removeAttr("class");#移除所有class $box.addClass("box1 box2");#在原有的基础上,给class添加个一个box1、box2,(不删除原class) $box.removeClass("box1");#只移除其中一个class "box1" $("#box p").toggleClass("on");#原来有class "on"的没有了,原来没有的现在有了 $("#box p").html("999");#在设置值的时候一般自带遍历 alert($("#box p").html());#在获取值的时候一般获取第一个 </script>
jq操作样式
.css() .width() .height() innerWidth()/innerHeight #算了padding outerWidth()/outerHeight #算了padding加border offset() #该对象有top、left属性,代表到浏览器窗口的top、left的值 position() #该对象有top、left的值,代表到定位父级的top、left的值 <script src="jQuery.js"></script> <script> var $box=$("#box"); $box.css("height","300px");#操作单个属性 $box.css({ "width":"200px", "height":"200x", "background":"red" }); #用键值对的形式操作多个属性 alert($box.width());#盒子本身的宽度300 alert($box.height());#盒子本身的高度200 alert($box.innerWidth());#盒子宽度+padding400 alert($box.innerHeight());#盒子高度+padding300 alert($box.outerWidth());#盒子宽度+padding+border420 alert($box.outerHeight());#盒子高度+padding+border420 alert($("#box").offset().top);#盒子距离顶部的距离 alert($("#box").offset().left);#盒子距离左边的距离 alert($("#box").position().top);#盒子距离父级顶部的距离 alert($("#box").position().left);#盒子距离父级左边的距离 </script>
scroll滚动条
<script> $(document).click(function () { console.log("滚动高度"+$(this).scrollTop());#这是获取高度 }); console.log("滚动宽度"+$(this).scrollLeft()); #这是获取宽度 $(document).click(function () { $(this).scrollTop(1000);#这是设置高度 $(this).scrollLeft(500);#这是设置宽度 }); </script>
append prepend 添加子元素
#添加子元素 可以是标签、本文、js对象、jq对象 append prepend appendTo prependTo <div id="box"> <p>我是本来的p</p> </div> <b id="box1">我是外面的b标签</b> <script src="jQuery.js"></script> <script> $("#box").append("<em>ahh</em>");#在p标签的后面添加 $("#box").prepend("<em>ahh1</em>");#在p标签的前面添加 var oB=document.getElementById("box1"); $("#box").append(oB);#将外面的b标签移动到前面div里面去了 $("#box").append($(oB));#相同效果 $("<em>ahh</em>").appendTo("#box");#跟上面意义一样 </script>
筛选
eq hasClass #检查当前的元素是否含有某个特定的类,如果有,返回true,否则返回false children #找儿子,可以不传参 find #不传参,默认不找;传参的话就找符合参数的后代 parent #不需要参数 parents("show") #找到名字叫做show的先祖 siblings #不传参,所有兄弟;传参,所有的兄弟按照参数筛选出合格的 <body> <div id="box" class="show"> <p>1</p> <p class="box1">2</p> <div> <p>3</p> <p>4</p> </div> </div> <script src="jQuery.js"></script> <script> alert($("p").hasClass("box2"));#检查p标签是否含有class "box2" 返回false console.log($("#box").children());#查找#box下面的所有儿子标签,传参的时候找儿子标签某某 console.log($("#box").find("p"));#查找#box下面的所有后代标签p,不传参的时候不找 console.log($("p").parent());找出所有p标签的爸爸 console.log($("p").parents());#一次p标签找出所有的祖宗 console.log($("p").parents(".show"));#找出class为show的祖宗 $("p").sibling().css("color","red");#将p标签的所有兄弟的样式都改便 $("p").sibling(".box1").css("color","red");#将p标签所有的class为box1的兄弟改变样式 </script> </body> </html>
事件
<body> <ul id="box"> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul> <script src="jQuery.js"></script> <script> var oBox=document.getElementById("box"); oBox.onclick=function () { alert(1); }; oBox.onclick=function () { alert(2); };#js里面的事件都是以赋值的形式,所以前面的函数被覆盖了,只会弹出 2 $("#box").click(function () { alert(1); });#这是jq里面的事件 $("#box").click(function () { alert(2); });#jq里面的事件是以绑定的形式,所以会弹出1和2 #绑定单个事件 $("li").on("clink",function () { alert($(this).index());#index() 在jq里面是方法(快速获取对应下标) }); #绑定多个事件 $("#box").on( { "clink":function () { console.log("惦记我"); }, "mouseenter":function () { console.log("一处啦") }, "mouseleave":function () { console.log("啦啦啦") } } ); #移除事件 $("#box").off();#如果不传参,就会将所有事件都移除 $("#box").off("mouseenter");#移除单个鼠标移入事件 #hover $("#box").hover(function () { console.log("ahh");#不管鼠标移入还是移出都会打印这个ahh }); $("#box").hover(function () { console.log("ahh") #鼠标移入打印ahh },function () { console.log("hhh") #鼠标移出打印hhh }); </script> </body>
二、动画
show hide toggle #不传参,瞬间显示隐藏;传一个数字,代表毫秒数,改变宽、高、透明度 fadeIn fadeOut fadeTo(1000,0.1) #默认事件300毫秒,改变透明度,可以吧透明度设置成一个值,时间参数不能省略 slideDown slideUp slideToggle #默认时间300毫秒,改变高度 #这三组不仅仅可以接受一个数字参数,能接受的数字如下: number/string #代表动画时间(可缺省)毫秒数(fast normal slow) string #代表运动曲线(可缺省) function #代表回调函数(可缺省)
<body> <div id="box"> </div> <script src="jQuery.js"></script> <script> var $box=$("#box"); $(document).click(function () { $box.hide(2000);#如果不传参,就瞬间小时;传了,就有动画效果得两秒后消失 }); var off=true;#用于判断图像是否存在 $(document).click(function () { if(off){#如果存在,就让他消失 $box.hide(2000); }else{#否则,就让他出现 $box.show(2000); } off=!off;#为了使再点一下的时候让他出现,取一下反 }); $(document).click(function () { $box.toggle(2000);#这个就是综合了上面那个函数 }); var off=true; $(document).click(function () { if(off){ $box.fadeIn(2000);#宽高并没有变化,只是改变透明度 }else{ $box.fadeOut(2000); } off=!off; }); $(document).click(function () { $box.fadeTo(1000,0.5);# }); var off=true; $(document).click(function () { if(off){ $box.slideUp(2000);#透明度并没有变化,只是改变高度 }else{ $box.slideDown(2000); } off=!off; }); $(document).click(function () { $box.slideToggle(1000,0.5);#只改变高度 }); </script> </body>
三、补充
添加兄弟元素
<body> <div id="box">555</div> <script src="jQuery.js"></script> <script> var $box=$("#box") $box.append("<b>hahahaha<b>");#添加子元素 $box.before("<b>hahahaha<b>");#在元素前加兄弟元素 $box.after("<b>hahahaha<b>");#在元素后加兄弟元素 </script> </body>
wrap
wrap #给每个元素添加一个父元素 unwrap #删除元素的父元素 wrapAll #给子元素添加一个父元素都包起来 wrapInner #给元素内的内容添加一个标签 <body> <div id="box"> <p>1</p> <span>01</span> <p>2</p> <span>02</span> <p>3</p> <span>03</span> </div> <script src="jQuery.js"></script> <script> $("#box p").wrap("<div></div>");#给个p元素添加一个div标签 $("#box p").unwrap();$删除p元素的父级元素 $("#box p").wrapAll("<div></div>>");#将p元素全部包起来然后添加到同一个父级元素 $("#box p").wrapInner("<b></b>>");#给p里面的内容添加b标签 </script> </body>
empty
empty #清空子节点 remove #移除自己(不保留数据和事件) detach #移除自己(保留数据和事件) <body> <div id="box"> <p class="box1">1</p> <p class="box2">2</p> <p class="box3">3</p> </div> <script src="jQuery.js"></script> <script> $("#box").empty();#清除#box目录下的所有子元素及所有后代 $("#box .p").remove(".box2"); #移除名字叫.box2的p标签的所有内容,包括自己;如果不传参就是移除所有p标签(包括自身) $("#box p").detach(".box1");#移除名字叫.box2的p标签的所有内容,包括自己 </script> </body>
animate
animate #传参 obj #必传 {}格式代表的变化的属性和目标值,数值变化 number/string #可缺省 代表毫秒数 或者三个预设好的值,默认为300毫秒 string #可缺省,代表运动曲线,默认jQuery提供“linear”和“swing” function #可缺省,代表动画结束后的回调函数 <body> <div id="box"></div> <script src="jQuery.js"></script> <script> var $box=$("#box"); $box.animate({ "width":"300px", "height":"300px", "margin-left":"200" },2000);#自定义动画样式 </script> </body>
stop
stop #清空动画队列,可以接受两个布尔值参数 #第一个不用管,第二个决定是否瞬间到达队列终点,true表示到,false表示不到(默认) <body> <div id="box"> <ul> <li>lucky</li> <li>tuple</li> <li>which</li> <li>xiaopo</li> <li>budong</li> </ul> </div> <script src="jQuery.js"></script> <script> $("#box ul li").hover(function () { $(this).stop(true,true).animate({"height": "400px"});#加了stop就能够清除队列,马上到达终点 },function () { $(this).stop(true,true).animate({"height": "50px"}); } ) </script> </body>
delay
<body> <div id="box"></div> <script src="jQuery.js"></script> <script> $(document).clink(function () { $("#box").fadeOut();#点击完马上消失 $("#box").delay(5000).fadeOut();#点完过5秒才消失,延迟消失,只对动画有效 }); $("#box").delay(5000).queue(function () { $(this).css("background","red");#如果想要delay对样式生效,要用这个 }) </script> </body>