jQuery 简介 
jQuery 是一个 JavaScript 库 
jQuery 极大地简化了 JavaScript 编程 
jQuery 库包含以下特性 
 
jquert.min.js 表示迷你版,也就是去掉缩进的版本
console.log($) 控制台有值,说明导入成功
 
1 2 3 4 5 6 7 8 9 $(function  ( 	$('#btn' ).click(function  ( 		$('#content' ).toggle(2000 );  	}); }); 等价于 window .onload = function  ( 	 } 
jQuery 对象,习惯以 $ 开头
$ === jQuery true
 
jQuery 常用方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 $(function  ( 	$('p' ).size(); }); $(function  ( 	$('#username' ).val(); }); $(function  ( 	$('#username' ).val('sss' ); }); $(function  ( 	$('#h1' ).html(); 	$('#h1' ).text(); }); $(function  ( 	$('#h1' ).css('color' , 'green' ); }); 
如果通过 jQuery 方法获取页面元素,没有查找到,返回值不是 null,而是返回一个空数组[],所以判断 jQuery.lenth != 0 来判断是否获取到元素 
jQuery 语法 基础语法是: $(selector).action()
格式说明:
美元符号定义 jQuery 
选择符(selector):”查询”和”查找”HTML 元素 
jQuery 的 action():执行对元素的操作,是一些方法 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 <!DOCTYPE html> <html lang="en" > <head>     <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js" ></script >      <title>jquery语法</title>  </ head><style> .disp {     width: 300 px;     height: 100 px;     border: 2 px solid red;     font-size: 28 px;     text-align: center; } #btn {     width: 300 px;     height: 10 px;     font-size: 18 px; } </style>  <body>     <div class="disp">我就是我不一样的烟火</ div>    <button id="btn" >点我</button>  </ body><script>          $(document ).ready(function (              });          $(function (                  $("#btn" ).css("color" , "red" );                  var  flag = false ;         $("#btn" ).click(function (             if  (flag) {                 $(".disp" ).show();                  flag = false ;             } else  {                 $(".disp" ).hide();                  flag = true ;             }         });     }); </script>  </ html>
jQuery选择器 jQuery 选择器允许对元素组或单个元素进行操作,有 4 种基本选择器 jQuery 使用 CSS 选择器来选取 HTML 元素
jQuery 元素选择器
$("p")选取元素 
$("p.mm")选取所有 class=”mm”的元素 
$("p#demo")选取所有 id=”demo”的元素
 
jQuery 类选择器
jQuery 的 id 选择器
jQuery 属性选择器
jQuery 使用 XPath 表达式(一种路径)来选择带有给定属性的元素;  
$("[href]")选取所有带有 href 属性的元素; $("[href='#']")选取所有带有 href 值等于”#”的元素; $("[href!='#']")选取所有带有 href 值不等于”#”的元素;$("[href^='.jpg']")/$("[href$='.jpg']")选取所有 href 值以”.jpg”开头/结尾的元素; 
jquery组合选择器
 
1 2 3 4 5 1.  一般组合选择器div, p { 	background: green; 	color: red; } 
表明:p和div都有这两个属性
1 2 3 4 5 2.  嵌套组合选择器div p { 	background: green; 	color: red; } 
空格隔开表明在div 这个父级下的 p 标签才会被改变属性
1 2 3 4 5 6 7 8 9 10 11 12 3.  子选择器div>p { 	background: green; 	color: red; } $('#myul > li' ).size;  $('#myul > li' ).selector;  $('#myul > li' ).get();  $('#myul > li' ).get(0 );  $('#myul > li' ).get(1 );  $('#myul > li' ).get(2 );  $('#myul > li' ).get(3 );  
大于号表明 只有父标签为div的p标签才会被设置属性
1 2 3 4 5 4.  相邻同级选择器div+p { 	background: green; 	color: red; } 
+号表明 只有相邻的同级的标签为div的p标签才会被设置属性
1 2 3 4 5 6 7 5.  属性选择器基本选择器[属性] 	 p[title] { 	background: green; 	color: red; } 
p 标签,只有有title 属性的标签的属性才会被改变
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 $(this );当前元素 $("#dv1>p" );id 号为 dv1 的所有子元素 p $("#dv1 p" );id 号为 dv1 的所有后代 p 元素 $("#dv1+div" );id 号为 dv1 的第一个兄弟元素 div $("#dv1~div" );id 号为 dv1 的所有兄弟元素 div $("#dv1,#dv2" );id 号为 dv1 与 dv2 的元素 $("p" );所有<p>元素 $("p.mm" );所有 class "mm" 的<p>元素 $(".mm" );所有 class "mm" 的元素 $("#mm" );id="mm" 的元素 $("ul li:first" );每个<ul>的第一个<li>元素  $("[href$='.jpg']" );所有带有以".jpg" 结尾的属性值的 href 属性 $("div#intro .head" );id 为"intro" 的<div>元素中的所有 class "head" 的元素  $("h2:nth-of-type(2)" );找到父元素中第二个 h2 元素  $("#pid" ).prev().css("color" ,"green" ); $("#pid" ).next().css("color" ,"red" ); 
使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 $('ul li:first' ); $('ul li:first-child' ); $('ul li:last' ); $('ul li:last-child' ); $('tr:odd' ).css('background-color' , 'green' ); $('tbody > tr:odd' ).css('background-color' , 'green' ); $('li:odd' ) $('ul li:nth-child(2n)' ) $('ul li:nth-child(even)' ) $('ul li:nth-child(odd)' ) $('ul li:nth-child(3n)' ) $('ul li:nth-child(2)' ) $('ul li:nth-child(3n+1)' ) $('ul li:nth-child(3n+2)' ) $('input[id$^=' check']' ); 
jQuery HTML DOM jQuery 的 HTML DOM 操作 
jQuery 获得内容和属性
 jQuery 的 DOM 操作(Document Object Model 文档对象模型) 
text():设置或返回所选元素的文本内容  
html():设置或返回所选元素的内容(包括 HTML 标记)  
val():设置或返回表单字段的值,要与 js 中的 value 对比  
attr():设置/改变内容和属性值 
 
 
参考代码 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 $("#btn1" ).click(function (          alert("Text: "  + $("#test" ).text()); });  $("#btn2" ).click(function (          alert("HTML: "  + $("#test" ).html()); });  $ ("#btn1" ).click(function (          alert("Value:"  + $("#test" ).val()); });  $("button" ).click(function (     alert($("#aa" ).attr("href" ); }); 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 <script src="/jquery/jquery-1.11.1.min.js" ></script > <script >  $(document).ready(function(){      $ ("#btn1").click(function(){         $("#test1").text("Hello me!");     });     $("#btn2").click(function(){         $("#test2").html("<b > Hello me!</b > ");     });     $("#btn3").click(function(){         $("#test3").val("今天天气不错");      }); }); $("#test4").click(function(){     //设置属性值      $("#aa").attr("href","http://www.baidu.com"); }); </script > </head>  <body> <p id="test1">这是段落</ p><p id="test2" >这是另一个段落</p>  <p>Input field:<input type="text" id="test3" value="Mickey Mouse"></ p> <a  href ="#"  id ="aa" > 我走了</a > <button id="btn1" >设置文本</button>  <button id="btn2">设置 HTML</ button>  H5 全栈实战教程 v1.2  <button id="btn3" >设置值 val</button>  <button id="btn4">设置属性值</ button> </body>  
jQuery 添加元素 添加新内容的四个 
append():在被选元素的结尾插入内容;  
prepend():在被选元素的开头插入内容  
after():在被选元素之后插入内容(元素之外)  
before():在被选元素之前插入内容(元素之外) 
 
参考代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <head> <script src="/jquery/jquery-1.11.1.min.js" ></script > <script >  function appendText(){     var txt1="<p > 我是 p1</p > "; //以 HTML 创建新元素     var txt2=$("<p > </p > ").text("我是 p2"); //以 jQuery 创建新元素      var   txt3=document.createElement("p");     txt3.innerHTML="我是 p3"; //通过 DOM 来创建文本      $("body").append(txt1,txt2,txt3);//追加新元素 } </script > </head>  <body> <p>这是一个段落文本!</ p><button onclick="appendText()" >追加文本</button>  </ body>
jQuery 删除元素 
参考代码
1 2 $("#div1" ).remove(); $("#div1" ).empty(); 
jQuery 增加删除类选择器 jQuery 获取并设置 CSS 类 就是类属性设置,通过 jQuery 的方法,可以很容易地对元素的 CSS 类进行动态操作, 就是对元素的 class 属性进行动态设置
jQuery 方法 
(1)addClass()向被选元素添加一个或多个类  
(2)removeClass()从被选元素删除一个或多个类  
(3)toggleClass()对被选元素进行添加/删除类的切换操作  
(4)css()方法,设置或返回样式属性 
 
 
 
1 2 3 4 5 6 7 8 9 10 11 <!--写个样式表,后面实例会用到--> <style> .text {     font-weight:bold;     font-size:xx-large; } .red {     color:red; } </style>  
1 2 3 4 5 6 7 8 9 $("button" ).click(function (     $("h1,h2,p" ).addClass("red" );      $("div" ).addClass("text" );  }); $("button" ).click(function (     $("#div1" ).addClass("text red" );  }); 
可以在 addClass()方法中规定多个类,用空格隔开
在不同的元素中删除指定的 class 属性
1 2 3 $("button" ).click(function (     $("h1,h2,p" ).removeClass("red" );  }); 
jQuery 的 toggleClass()方法
1 2 3 $("button" ).click(function (     $("h1,h2,p" ).toggleClass("red" );  }); 
jQuery 遍历 Query 遍历(其实就是找元素)
意为”找所有”,用于根据其相对于其他元素的关系来”查找”(或选取)HTML 元素,以某项选择开始,并沿着这个选择移动,直到抵达要找的元素为止,图示树形结构图
jQuery 事件绑定 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 <!DOCTYPE html> <html lang="en" > <head>     <meta charset="UTF-8" >     <title>Title</title>      <script src="static/ jquery/jquery-1.11 .3 .min.js"></script>     <script>         $(function () {             $('#btn1').bind('click', function () {                 alert(1);             })             $('.mybtn').bind('click', function () {                 alert(23);             })             // 用的最多             $('#btn4').click(function () {                 alert(4);             });             // 动态添加事件处理函数             $('#btn5').on('click', function () {                 alert(5);             })             $('#btns > button').click(function () {                 console.log(this);                 console.log($(this));             })             // 动态添加事件处理函数             // 这个事件函数是绑定在父类元素 div,上,事件触发是里面的 button 元素             // 冒泡被监听到。             $('#btns').on('click', function () {                 console.log(this);             })             // 加入点击按钮添加一个新的按钮,要为新的按钮绑定点击事件,需要用到 on             $('#btn0').click(function () {                 $('#btns').append('<button id=" btn10">按钮10</button>');             })         });     </script> </head> <body> <button id=" btn0">按钮0</button> <button id=" btn1">按钮1</button> <button id=" btn2" class=" mybtn">按钮2</button> <button id=" btn3" class=" mybtn">按钮3</button> <button id=" btn4">按钮4</button> <button id=" btn5">按钮5</button> <div id=" btns">     <button id=" btn6">按钮6</button>     <button id=" btn7">按钮7</button>     <button id=" btn8">按钮8</button>     <button id=" btn9">按钮9</button> </div> </body> </html> 
分页插件 下载地址 
1 2 3 4 5 6 7 <%@ page contentType="text/html;charset=UTF-8"  language="java"  %> <link rel="stylesheet"  href="/js/plugins/bootstrap/css/bootstrap.css"  type="text/css"  /> <link rel="stylesheet"  href="/css/core.css"  type="text/css"  /> <script type="text/javascript"  src="/js/plugins/jquery/jquery-2.1.4.min.js" ></script >  <script type="text/javascript"  src="/js/plugins/bootstrap/js/bootstrap.js" ></script >  <!-- 分页插件 --> <script type="text/javascript"  src="/js/plugins/page/jquery.twbsPagination.min.js" ></script >  
导入js库。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 <script type="text/javascript" >     $(function  (         if  ((${result.totalPage}) > 0 ) {             $('#pagination-demo' ).twbsPagination({                 initiateStartPageClick: false ,                 totalPages: ${result.totalPage},                  visiblePages: 7 ,                  startPage: ${result.currentPage},                 first: '首页' ,                 prev: '上一页' ,                 next: '下一页' ,                 last: '尾页' ,                 onPageClick: function  (event, page )                                           $('#currentPage' ).val(page)                     $('#searchForm' ).submit()                                      }             })         }     }) </script>  <div style="display: flex; display: -webkit-flex; justify-content: center">     <ul id="pagination-demo" class="pagination"></u l></div>  
attr、prop、data 
data-开头的属性,使用 data 方法获取属性值,因为若属性时 JSON 字符串,会自动转为 JS 对象 
如果 checked  selected 这种单属性,使用 prop 方法 
如果是 value 属性,使用 val 方法。 
如果是样式,使用 css 方法,addClass。 
其他使用 attr 
 
需要记住的方法:
foreach 实现的底层原理 函数式编程,foreach、map 底层实现
foreach
1 2 3 4 5 6 7 8 9 10 11 12 Array .prototype.foreach2 = function  (fn )     for  (var  i = 0 ; i < this .length; i++) {         fn(this [i], i, this )     } } var  arr = ['1' , '2' , '3' ]arr.forEach(function  (value, index )      console .log(value);     console .log(index); }) 
map
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Array .prototype.map2 = function  (fn )     var  newArr = []     for  (var  i = 0 ; i < this .length; i++) {         var  result = fn(this [i], i, this )         newArr.push(result)     }     return  newArr } var  newA2 = arr.map2(function  (value, index, array )     return  '1'  + value }) console .log(newA2);
应用 argument 全局对象可以拿到函数中所有的参数。
1 2 3 4 5 6 function  checkall (	$('input[name=hobby]' ).prop('check' , function (i, currentCheckedValue ) 		 		return  !currentCheckedValue;  	}) } 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 $(function  (     var  checkHobbyState = function (                  var  sum = true ;         $('input[name=hobby]' ).each(function  (index, domEle )              sum = sum && $(domEle).prop('checked' )         })         $('#checkAll' ).prop('checked' , sum)     }     $('#checkAll' ).change(function  (         $('input[name=hobby]' ).prop('checked' , $(this ).prop('checked' ))     })          $('#btn_checkAll' ).click(function  (         $('input[name=hobby]' ).prop('checked' , true )         checkHobbyState()     })     $('#btn_checkUnAll' ).click(function  (         $('input[name=hobby]' ).prop('checked' , false )         checkHobbyState()     })     $('#btn_checkReverse' ).click(function  (         $('input[name=hobby]' ).prop('checked' , function  (index, checkedValue )              return  !checkedValue         })         checkHobbyState()     }) }) 
1 2 3 4 5 6 7 8 9 function  moveSelected (id1, id2 )     $('#'  + id2).append($('#'  + id1 + '> option:selected' )) } function  moveAll (id1, id2 )     $('#'  + id2).append($('#'  + id1 + '> option' )); } 
异步请求 在执行一些请求时,需要根据响应结果做一些事情,这时候直接访问后台资源刷新页面就不是特别合适。最好使用异步请求,即只通过 Ajax 请求,获取数据,而不重新生成页面。
这时就可以通过后台响应的结果信息使用 js 做一些操作。
解决方案:
自己手动使用 ajax 发送异步请求。详情见 Ajax实现登录  
使用 jquery-form 插件 
 
使用 jquery-form 插件需要引入库 <script type="text/javascript" src="/js/plugins/jquery-form/jquery.form.js"></script>
情况一:表单自带提交按钮
1 2 3 4 5 6 7 8 9 $(function ( 	$("#testForm" ).ajaxForm(function (data ) 		console .debug(data) 	}) }) <form id="testForm"  action="/text.do"  method="post" > 	<input type="submit"  value="提交" > </form>  
情况二:表单不带有提交按钮,而是普通按钮,需要手动提交
1 2 3 4 5 6 7 8 9 10 11 12 13 $(function ( 	$("#btn_test" ).click(function ( 		$("#testForm" ).submit(); 	}) 	$("#testForm" ).ajaxForm(function (data ) 		console .debug(data) 	}) }) <form id="testForm"  action="/text.do"  method="post" > 	<input type="submit"  value="提交" > </form>  
jQuery 清空表单内容 1 2 $('#editForm' )[0 ].reset() 
jQuery 完成表单校验 jquery 库,jquery-validation/jquery.validate.min.js
messages_cn.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 jQuery.extend(jQuery.validator.messages, {       required: "必选字段" , 		remote: "请修正该字段" , 		email: "请输入正确格式的电子邮件" , 		url: "请输入合法的网址" , 		date: "请输入合法的日期" , 		dateISO: "请输入合法的日期 (ISO)." , 		number: "请输入合法的数字" , 		digits: "只能输入整数" , 		creditcard: "请输入合法的信用卡号" , 		equalTo: "请再次输入相同的值" , 		accept: "请输入拥有合法后缀名的字符串" , 		maxlength: jQuery.validator.format("请输入一个长度最多是 {0} 的字符串" ), 		minlength: jQuery.validator.format("请输入一个长度最少是 {0} 的字符串" ), 		rangelength: jQuery.validator.format("请输入一个长度介于 {0} 和 {1} 之间的字符串" ), 		range: jQuery.validator.format("请输入一个介于 {0} 和 {1} 之间的值" ), 		max: jQuery.validator.format("请输入一个最大为 {0} 的值" ), 		min: jQuery.validator.format("请输入一个最小为 {0} 的值" ) }); 
引入和使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 <script type="text/javascript"  src="/js/plugins/jquery-validation/jquery.validate.min.js" ></script >  <script type="text/javascript"  src="/js/plugins/jquery-validation/message/messages_cn.js" ></script >  $('#editForm' ).validate({          rules: {                                    name: {             required: true ,             minlength: 1          },         password: {             required: true ,             rangelength: [4 , 6 ]         },         repassword: {             equalTo: "#password"          },         age: {             digits: true ,             range: [18 , 65 ]         },         email: {             required: "邮箱必填" ,             email: "邮箱格式不正确"          }     },          messages: {                  name: {             required: "用户必填" ,             minlength: "用户名长度必须大于5个"          }     },     submitHandler:function (form )          $('#editForm' ).ajaxForm(function  (data )              if  (data.success) {                 $.messager.confirm("温馨提示" , "保存成功" , function  (                     window .location.href = "/employee/list"                  })             } else  {                 $.messager.alert("温馨提示" , data.message)             }         })     } }) 
上述校验只有对原生的和同步请求有效。对异步请求和插件提交请求无效。
1 2 3 4 5 6 7 8 9 10 11 submitHandler:function (form )      $('#editForm' ).ajaxForm(function  (data )          if  (data.success) {             $.messager.confirm("温馨提示" , "保存成功" , function  (                 window .location.href = "/employee/list"              })         } else  {             $.messager.alert("温馨提示" , data.message)         }     }) } 
覆写 submitHandler 才可以进行校验并自己提交,必须自己提交因为,submitHandler 已经覆盖了原来的方法,无法自动提交了。
编辑回显数据 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 $(".btn_input_modal" ).click(function  (          $("#editModal" ).modal("show" );          $(".modal-title" ).html("移交历史添加" );          $("#editForm" )[0 ].reset();          var  data = $(this ).data("json" );     if  (data) {         $(".modal-title" ).html("移交历史编辑" );         $("input[name='id']" ).val(data.id);         $("input[name='name']" ).val(data.name);         $("input[name='sn']" ).val(data.sn);     } }) $(".inputBtn" ).click(function  (     var  pid = '${parentId}' ;          $(".modal-title" ).html("数据字典明细添加" );          $("#editForm" )[0 ].reset();          var  parentName = $("#dicDirUl li.active" ).find("a" ).html();     $("#editForm input[name='parentName']" ).val(parentName);          $("#editModal" ).modal("show" );          var  data = $(this ).data("json" );     if (data){         $(".modal-title" ).html("数据字典明细编辑" );         $("#editForm input[name='id']" ).val(data.id);         $("#editForm input[name='title']" ).val(data.title);         $("#editForm input[name='sequence']" ).val(data.sequence);     } }) <div class "  col-sm-3" >     <div class "panel panel-info" >         <div class "panel-heading" ><strong > 字典明细</strong > </div >          <ul class "list-group"  id="dicDirUl" >             <#list dictionary.list as d>                 <li class "list-group-item" ><a  class ="dicDir"  data-pid ="${d.id}"  href ="javascript:;" > ${d.title}</a > </li >              </#list>              <script>                 $(".dicDir[data-pid='${parentId}']").closest("li").addClass("active");                 $(".dicDir[data-pid='${parentId}']").css("color","white")             </ script>        </ul>      </ div></div>