1. 首页
  2. >
  3. 前端开发
  4. >
  5. Javascript

《锋利的jQuery》观后记

API文档 https://api.jquery.com/

网页中所有 DOM结构绘制完毕后就执行,而不是在页面所有内容(例如图片等占用宽带的内容)加载完毕之后才执行事件。它允许用户在第一眼看到元素的时候,就能立即看到元素产生的一些隐藏效果、显示效果和其它效果。

若要访问图像的高度等属性,可以考虑jquery提供的load()事件。

$(document).ready(function(){      //code   }); 缩写形式: (function () {     //jquery代码 })();

链式操作风格

对于同一个对象的较多操作,建议每行写一个操作。

//等待dom元素加载完毕. $(document).ready(function(){     $(".level1 > a").click(function(){         $(this).addClass("current") //给当前元素添加"current"样式         .next().show()  //下一个元素显示         .parent().siblings().children("a").removeClass("current")//父元素的兄弟元素的子元素<a>移除"current"样式         .next().hide();//它们的下一个元素隐藏         return false;     }); }); </script> 

jQuery对象和DOM对象

<script type="text/javascript">     //等待dom元素加载完毕.     $(document).ready(function(){         var domObj = document.getElementsByTagName("h3")[0]; // Dom对象         var $jQueryObj = $(domObj);  //jQuery对象         alert("DOM对象:"+domObj.innerHTML);         alert("jQuery对象:"+$jQueryObj.html());     }); </script> 

jQuery对象和DOM对象的相互转换

  <script>   //等待dom元素加载完毕.     $(document).ready(function(){         var $cr = $("#cr");  //jQuery对象         var cr = $cr.get(0); //DOM对象,获取 $cr[0]         $cr.click(function(){             if($cr.is(":checked")){ //jQuery方式判断                 alert("感谢你的支持!你可以继续操作!");             }                    if(cr.checked){ //DOM方式判断                 alert("感谢你的支持!你可以继续操作!");             }         })     }); </script> 

解决jQuery和其它库的冲突

<body> <p id="pp">Test-prototype(将被隐藏)</p> <p >Test-jQuery(将被绑定单击事件)</p>   <script type="text/javascript">   var $j = jQuery.noConflict(); //自定义一个比较短快捷方式   $j(function(){//使用jQuery       $j("p").click(function(){           alert( $j(this).text() );       });   });    $("pp").style.display = 'none';//使用prototype.js隐藏元素   </script> </body> 

jQuery选择器「完善的处理机制」

<script type="text/javascript">   if(document.getElementById("tt")){//需要判断,如果不判断,找不到ID为tt会报错      document.getElementById("tt").style.color="red";    }    //用jQuery,无需判断$('#tt')是否存在     $('#tt').css("color","red");  </script> 需要注意的是,$(‘#tt’)获取的永远是对象,   即使网页上没有此元素。所以判断应该根据获取到元素的长度来判断,代码如下: <script type="text/javascript">         if($('#tt').length > 0){             // do something          }         // 或者转换为DOM对象来判断         if($('#tt')[0]){             // do something          }     </script> 

选择器

层次选择器 //选择 所有class为one 的下一个div元素.       $('#btn3').click(function(){         $('.one + div').css("background","#bbffaa");       })       //选择 id为two的元素后面的所有div兄弟元素.       $('#btn4').click(function(){           $('#two ~ div').css("background","#bbffaa");       }) 基本过滤选择器 //选择第一个div元素.       $('#btn1').click(function(){           $('div:first').css("background","#bfa");       })       //选择最后一个div元素.       $('#btn2').click(function(){           $('div:last').css("background","#bfa");       })       //选择class不为one的 所有div元素.       $('#btn3').click(function(){           $('div:not(.one)').css("background","#bfa");       })       //选择 索引值为偶数 的div元素。       $('#btn4').click(function(){           $('div:even').css("background","#bfa");       })       //选择 索引值为奇数 的div元素。       $('#btn5').click(function(){           $('div:odd').css("background","#bfa");       })       //选择 索引等于 3 的元素       $('#btn6').click(function(){           $('div:eq(3)').css("background","#bfa");       })       //选择 索引大于 3 的元素       $('#btn7').click(function(){           $('div:gt(3)').css("background","#bfa");       })      //选择 索引小于 3 的元素       $('#btn8').click(function(){           $('div:lt(3)').css("background","#bfa");       })        //选择 所有的标题元素.比如h1, h2, h3等等...       $('#btn9').click(function(){           $(':header').css("background","#bfa");       })       //选择 当前正在执行动画的所有元素.       $('#btn10').click(function(){           $(':animated').css("background","#bfa");       });       //选择 当前获取焦点的所有元素.       $('#btn11').click(function(){           $(':focus').css("background","#bfa");       }); 内容过滤选择器 //选取含有文本"di"的div元素.       $('#btn1').click(function(){           $('div:contains(di)').css("background","#bbffaa");       })       //选取不包含子元素(或者文本元素)的div空元素.       $('#btn2').click(function(){           $('div:empty').css("background","#bbffaa");       })       //选取含有class为mini元素 的div元素.       $('#btn3').click(function(){           $("div:has('.mini')").css("background","#bbffaa");       })       //选取含有子元素(或者文本元素)的div元素.       $('#btn4').click(function(){           $('div:parent').css("background","#bbffaa");       }) 属性过滤选择器 //选取含有 属性title 的div元素.       $('#btn1').click(function(){           $('div[title]').css("background","#bbffaa");       })       //选取 属性title值等于 test 的div元素.       $('#btn2').click(function(){           $('div[title=test]').css("background","#bbffaa");       })       //选取 属性title值不等于 test 的div元素.       $('#btn3').click(function(){           $('div[title!=test]').css("background","#bbffaa");       })       //选取 属性title值 以 te 开始 的div元素.       $('#btn4').click(function(){           $('div[title^=te]').css("background","#bbffaa");       })       //选取 属性title值 以 est 结束 的div元素.       $('#btn5').click(function(){           $("div[title$=est]").css("background","#bbffaa");       })       //选取 属性title值 含有 es  的div元素.       $('#btn6').click(function(){           $("div[title*=es]").css("background","#bbffaa");       })       //组合属性选择器,首先选取有属性id的div元素,然后在结果中 选取属性title值 含有 es 的元素.       $('#btn7').click(function(){           $("div[id][title*=es]").css("background","#bbffaa");       }) 子元素过滤选择器 //选取每个父元素下的第2个子元素       $('#btn1').click(function(){           $('div.one :nth-child(2)').css("background","#bbffaa");       })       //选取每个父元素下的第一个子元素       $('#btn2').click(function(){           $('div.one :first-child').css("background","#bbffaa");       })       //选取每个父元素下的最后一个子元素       $('#btn3').click(function(){           $('div.one :last-child').css("background","#bbffaa");       })       //如果父元素下的仅仅只有一个子元素,那么选中这个子元素       $('#btn4').click(function(){           $('div.one :only-child').css("background","#bbffaa");       }) 表单选择器 var $alltext = $("#form1 :text");     var $allpassword= $("#form1 :password");     var $allradio= $("#form1 :radio");     var $allcheckbox= $("#form1 :checkbox");    var $allsubmit= $("#form1 :submit");   var $allimage= $("#form1 :image");   var $allreset= $("#form1 :reset");   var $allbutton= $("#form1 :button");  // <input type=button />  和 <button ></button>都可以匹配   var $allfile= $("#form1 :file");     var $allhidden= $("#form1 :hidden");  // <input type="hidden" />和<div>test</div>都可以匹配.     var $allselect = $("#form1 select");     var $alltextarea = $("#form1 textarea");        var $AllInputs = $("#form1 :input");   var $inputs = $("#form1 input"); 表单对象属性过滤选择器 //使用:selected选择器,来操作下拉列表.       $("select").change(function () {               var str = "";               $("select :selected").each(function () {                     str += $(this).text() + ",";               });               $("div").eq(1).html("<strong>你选中的是:"+str+"</strong>");       }).trigger('change');         // trigger('change') 在这里的意思是:select加载后,马上执行onchange.         // 也可以用.change()代替. //对表单内 可用input 赋值操作.       $('#btn1').click(function(){           $("#form1 input:enabled").val("这里变化了!");             return false;       })       //对表单内 不可用input 赋值操作.       $('#btn2').click(function(){           $("#form1 input:disabled").val("这里变化了!");           return false;       })       //使用:checked选择器,来操作多选框.       $(":checkbox").click(countChecked);        function countChecked() {           var n = $("input:checked").length;           $("div").eq(0).html("<strong>有"+n+" 个被选中!</strong>");       }  

操作节点

插入节点 //<![CDATA[   $(function(){     var $li_1 = $("<li title='香蕉'>香蕉</li>");    //  创建第一个<li>元素     var $li_2 = $("<li title='雪梨'>雪梨</li>");    //  创建第二个<li>元素     var $li_3 = $("<li title='其它'>其它</li>");    //  创建第三个<li>元素      var $parent = $("ul"); // 获取<ul>节点,即<li>的父节点     var $two_li = $("ul li:eq(1)"); //  获取<ul>节点中第二个<li>元素节点         $parent.append($li_1);  //  append方法将创建的第一个<li>元素添加到父元素的最后面     $parent.prepend($li_2);  //  prepend方法将创建的第二个<li>元素添加到父元素里的最前面     $li_3.insertAfter($two_li); //  insertAfter方法将创建的第三个<li>元素元素插入到获取的<li>之后    });   //]]> 移动节点 //<![CDATA[   $(function(){     var $one_li = $("ul li:eq(1)");             //  获取<ul>节点中第二个<li>元素节点     var $two_li = $("ul li:eq(2)");   //  获取<ul>节点中第三个<li>元素节点     $two_li.insertBefore($one_li);    //移动节点   });   //]]> 删除节点 //<![CDATA[   $(function(){       $("ul li").click(function(){          alert( $(this).html() );       })       $("ul li:eq(1)").empty(); // 找到第二个<li>元素节点后,清空此元素里的内容        var $li = $("ul li:eq(1)").remove(); // 获取第二个<li>元素节点后,将它从网页中删除。       $li.appendTo("ul");   //把刚刚删除的节点又重新添加到ul元素里         //  对比 remove() 与detach();       var $li = $("ul li:eq(1)").detach(); // 获取第二个<li>元素节点后,将它从网页中删除。       $li.appendTo("ul");   //重新追加元素,发现之前绑定的事件还在,如果使用remove(),之前绑定的事件将失效。   });   //]]> 复制节点 <script type="text/javascript">   $(function(){      $("ul li").click(function(){          //同时复制元素中所绑定的事件          $(this).clone(true).appendTo("ul"); // 注意参数true          //可以复制自己,并且他的副本也有同样功能。       })      });   </script> 替换节点 //<![CDATA[   $(function(){      $("p").replaceWith("<strong>你最不喜欢的水果是?</strong>");       // 同样的实现: $("<strong>你最不喜欢的水果是?</strong>").replaceAll("p");    });   //]]> 包裹节点 $(function(){       $("strong").wrap("<b></b>");//用<b>元素把<strong>元素包裹起来       $("strong").wrapAll("<b></b>");//将所有匹配的元素用b元素包裹起来       $("strong").wrapInner("<b></b>");//用b包裹strong的字内容   }); 

实战提示效果

<style type="text/css"> body{     margin:0;     padding:40px;     background:#fff;     font:80% Arial, Helvetica, sans-serif;     color:#555;     line-height:180%; } p{     clear:both;     margin:0;     padding:.5em 0; } /* tooltip */ #tooltip{     position:absolute;     border:1px solid #333;     background:#f7f5d1;     padding:1px;     color:#333;     display:none; } </style> <script type="text/javascript"> //<![CDATA[ $(function(){     var x = 10;       var y = 20;     $("a.tooltip").mouseover(function(e){         this.myTitle = this.title;         this.title = "";             var tooltip = "<div id='tooltip'>"+ this.myTitle +"<\/div>"; //创建 div 元素         $("body").append(tooltip);  //把它追加到文档中         $("#tooltip")             .css({                 "top": (e.pageY + y) + "px",                 "left": (e.pageX  + x) + "px"             }).show("fast");      //设置x坐标和y坐标,并且显示     }).mouseout(function(){              this.title = this.myTitle;         $("#tooltip").remove();   //移除      }); }); //]]> </script> </head> <body>   </body> 

jQuery中的事件与动画

事件绑定   <script type="text/javascript">   $(function(){       $("#panel h5.head").mouseover(function(){           $(this).next().show();       }).mouseout(function(){           $(this).next().hide();       })   })   $(function(){       $("#panel h5.head").bind("click",function(){           var $content = $(this).next();           if($content.is(":visible")){               $content.hide();           }else{               $content.show();           }       })   })   </script> 合成事件 	jQuery有两个合成事件-----hover()方法和toggle()方法。     <script type="text/javascript">     $(function(){         $("#panel h5.head").toggle(function(){                 $(this).addClass("highlight");                 $(this).next().show();         },function(){                 $(this).removeClass("highlight");                 $(this).next().hide();         });     })     </script> 事件冒泡 // 为span元素绑定click事件     $('span').bind("click",function(event){//event:事件对象         var txt = $('#msg').html() + "<p>内层span元素被点击.<p/>";         $('#msg').html(txt);         event.stopPropagation();    //  阻止事件冒泡=return false     });      $("#sub").bind("click",function(event){              var username = $("#username").val();  //获取元素的值              if(username==""){     //判断值是否为空                $("#msg").html("<p>文本框的值不能为空.</p>");  //提示信息                event.preventDefault();  //阻止默认行为 ( 表单提交 )=可以return false            }        })  事件对象的属性     <script>     $(function(){         $("a[href='http://google.com']").click(function(event) {         alert(event.type);//获取事件类型         alert("Current mouse position: " + event.pageX + ", " + event.pageY );//获取鼠标当前相对于页面的坐标         alert(event.which)  // 1 = 鼠标左键 ; 2 = 鼠标中键; 3 = 鼠标右键              var tg = event.target;  //获取事件对象             alert( tg.href ) ;             return false;//阻止链接跳转             });         })     </script> 移除事件     <script type="text/javascript">         $(function(){            $('#btn').bind("click", function(){                          $('#test').append("<p>我的绑定函数1</p>");                   }).bind("click", function(){                          $('#test').append("<p>我的绑定函数2</p>");                   }).bind("click", function(){                          $('#test').append("<p>我的绑定函数3</p>");                   });            $('#delAll').click(function(){                   $('#btn').unbind("click");//移除按钮元素上以前注册的事件            });         })     </script>     <script type="text/javascript">         $(function(){            $('#btn').bind("click", myFun1 = function(){                          $('#test').append("<p>我的绑定函数1</p>");                   }).bind("click", myFun2 = function(){                          $('#test').append("<p>我的绑定函数2</p>");                   }).bind("click", myFun3 = function(){                          $('#test').append("<p>我的绑定函数3</p>");                   });            $('#delTwo').click(function(){                   $('#btn').unbind("click",myFun2);//移除指定的事件            });         })     </script> 

jQuery 中的动画

.stop()方法会结束当前正在进行的动画,并立即执行队列中的下一个动画。 <script type="text/javascript"> $(function(){      $("#panel").hover(function() {         $(this).stop()             .animate({height : "150" } , 200 )             .animate({width : "300" } , 300 )//组合动画     },function() {         $(this).stop()             .animate({height : "22" } , 200 )             .animate({width : "60" } , 300 )     }); }); </script> $(function(){       $("button:eq(0)").click(function () {           $("#panel")             .animate({height : "150" } , 1000 )             .animate({width : "300" } , 1000 )             .hide(2000)             .animate({height : "show" , width : "show" , opacity : "show" } , 1000 )             .animate({height : "500"} , 1000 );       });       $("button:eq(1)").click(function () {           $("#panel").stop();//停止当前动画,继续下一个动画       });       $("button:eq(2)").click(function () {           $("#panel").stop(true);//清除元素的所有动画       });       $("button:eq(3)").click(function () {           $("#panel").stop(false,true);//让当前动画直接到达末状态 ,继续下一个动画       });       $("button:eq(4)").click(function () {           $("#panel").stop(true,true);//清除元素的所有动画,让当前动画直接到达末状态        }); }) </script>  动画例子 <script type="text/javascript"> $(function(){     $("#panel").css("opacity", "0.5");//设置不透明度     $("#panel").click(function(){         $(this).animate({left: "400px", height:"200px" ,opacity: "1"}, 3000)                 .animate({top: "200px" , width :"200px"}, 3000 ,function(){                     $(this).css("border","5px solid blue");                 })                }); }); </script> 延迟动画 在动画执行的过程中,如果想对动画进行延迟操作,那么可以使用delay()方法。 $(function(){     $("#panel").css("opacity", "0.5");//设置不透明度     $("#panel").click(function(){             $(this).animate({left: "400px", height:"200px" ,opacity: "1"}, 3000)                     .delay(1000)                     .animate({top: "200px" , width :"200px"}, 3000 )                     .delay(2000)                     .fadeOut("slow");     }); }); 

序列化元素

serialize()     因为serialize()方法作用于jQuery对象,所以不光只有表单能使用它。返回字符串。     var $data =  $(":checkbox,:radio").serialize();     $.get("get1.asp", $("#form1").serialize() , function (data, textStatus){       $("#resText").html(data); // 把返回的数据添加到页面上     }          ); serializeArray()     返回JSON格式的数据。     <script type="text/javascript">        $(function(){              var fields = $(":checkbox,:radio").serializeArray();              console.log(fields);// Firebug输出              $.each( fields, function(i, field){                 $("#results").append(field.value + " , ");             });         })        </script> param()     它是serialize()方法的核心,用来对一个数组或对象按照key/value进行序列化。     $(function(){             var obj={a:1,b:2,c:3};             var  k  = $.param(obj);             alert(k) // 输出  a=1&b=2&c=3      }) 

jQuery插件的使用和写法

插件(plugin)是一种遵循一定规范的应用程序接口编写出来的程序。

网址 https://plugins.jquery.com/