jQuery干货
1.简介:jQuery库可以通过一行简单的标记被添加到网页中
     2.需要具备的基础知识:html、css、javascript
     3.jQuery是什么:javascript函数库(js框架),安全、效率、简洁。有以下功能:html元素选取及操作、css操作、html事件函数、js特效和动画、html DOM遍历和修改、ajax、大量插件
     4.使用理由:最流行基于dom操作的js框架,提供大量的扩展
     5.官网地址:https://jquery.com/
     6.下载版本:生产版本-用于实际网站,已被精简和压缩;开发版本-用于测试和开发,代码可读
     7.下载地址:https://jquery.com/download/
     8.简单语法-作用:选择HTML元素,执行actions(操作)
     9.简单语法-基础语法:$(selector).action() 说明:$定义jquery、selector-选择符查询和查找HTML元素、action执行对元素的操作
     10.简单语法-实例
         <script>
             $(this).hide() - 隐藏当前元素
             $("p").hide()  - 隐藏所有<p>元素 
             $("#test").hide() - 隐藏所有id=test的元素
         <script>
     11.简单语法-文档就绪事件:为了防止文档在完全加载就绪之前运行jquery代码,如果文档没有完全加载就运行函数,可能出错
         方法1:$(document).ready(function(){});
         方法2:$(function(){});
     12.jQuery选择器-定义:jQuery选择器允许对HTML元素组或单个元素进行操作。jQuery选择器基于元素的id、类、类型、属性、属性值等查找或选择HTML元素。
         它基于已经存在的CSS选择器,另外还有一些自定义的选择器。
         jQuery中的选择器都以$开头:$();
     13.相关重点选择器(重点内容:
         13.1 元素选择器:jQuery元素选择器基于元素名选择元素。例如-在页面中选取所有"p"元素:$("p")/jQuery("p")
             实例:用户点击按钮后,所有p元素进行隐藏
             实例代码:$(function(){
                         $("button").click(function(){
                             $("p").hide();
                         });
                       });
         13.2 #id选择器:jQuery #id选择器通过HTML元素的id属性选取指定的元素。页面中元素的id唯一,在页面中选取唯一的元素通过#id选择器。例如-选择id=test的元素:$("#test")
             实例:用户点击按钮后,id=test的元素进行隐藏
             实例代码:$(function((){
                         $("button").click(function(){
                             $("#test").hide();
                         });
                       });
         13.3 .class选择器:jQuery类选择可以通过class查找元素。例如-查找class=test的元素:$(".test")
             实例:用户点击按钮后,class=test的属性进行隐藏
             实例代码:$(function(){
                         $("button").click(function(){
                             $(".test").hide();
                         });
                       });
         13.4 其他选择器
             $("*") 选取所有元素
             $("this") 选取当前元素
             $("p.intro") 选取class=intro的p元素
             $("p:first") 选取第一个p元素
             $("p:last") 选取最后一个p元素
             $("[href]") 选取带有htef属性的元素
             $("[href=]") 选择带有href属性并且属性值等于某个值的元素
             $("a[tatger=_blank]") 选取a标签中带有target属性且属性值等于_blank的元素
             $(":button") 选取页面所有的button
             $(":checked") 选取页面所有被选中的元素
             $("tr:even") 选取偶数位的tr
             $("tr:odd") 选取奇数位的tr
             $(":selected") 选取select中被选中的元素
     14.jQuery事件
         14.1 定义:页面对不同访问者的响应叫做事件。事件处理程序指的是当HTML中发生某些事件时所调用的方法。
         14.2 实例:元素上移动鼠标、选取单选按钮、点击元素、按下按键时触发keypress事件
         14.3 简单用法:在jQuery中,大多数DOM事件都有一个等效的jQuery方法。页面中指定一个点击事件:$("p").click(function(){});
         14.4 常用的jQuery事件方法:
             click  单击事件-鼠标点击某个对象
             实例:给文档中id=box的元素添加点击事件
             实例代码:$(function(){
                         $("#box").click(function(){
                             alert("单击事件");
                         });
                       });
             
             在jQuery事件中,也可主动响应对应的事件:$("box").click();
             
             dbclick 双击事件-鼠标双击某个对象
             实例:给文档中id=box的元素添加双击事件
             实例代码:$(function(){
                         $("#box").dbclick(function(){
                             console.log("双击事件");
                         });
                       });
             
             focus 获得焦点事件
             blur  失去焦点事件
             实例:给文档中的inpyt元素添加点击事件
             实例代码:$(function(){
                         $("input").focus(function(){
                             console.log("获得焦点");
                         });
                         
                         $("input").blur(function(){
                             console.log("失去焦点");
                         });
                      });
             
             change 改变事件,change域的内容被改变时触发,用于select、input和textarea标签。
             当用于select元素时,change事件会在选择某个选项时发生;当用于input和textarea元素时,该时间会在元素失去焦点时触发。
             实例:给文档中的select标签和input标签添加改变时间
             实例代码:
                 <body>
                     故乡:<select name="city" id="city">
                         <option value="1">北京</option>
                         <option value="2">广州</option>
                         <option value="3">武汉</option>
                         <option value="4">深圳</option>
                     </select>
                     
                     密码:<input type="password" placeholder="请输入密码">
                 </body>
                 
                 <script>
                     $("select").change(function(){
                         console.log("选中城市为:"+$(this).val);
                     });
                     
                     $("input").change(function(){
                         console.log("输入密码为:"+$(this).val);
                     });
                 </script>
             
             mouseenter 鼠标事件-鼠标指针穿过元素时触发,大多数与mouseleave事件一起使用。mouseover和mouseout事件一起使用。
             与mouseover事件不同,只有当鼠标指针穿过被选元素时,才会触发mouseenter事件。如果鼠标指针穿过任何子元素,同样会触发mouseover事件。
             实例:给id=box的元素添加鼠标事件
             实例代码:
                 $(function(){
                     $("#box").mouseenter(function(){
                         console.log("鼠标进入");
                     });
                     
                     $("#box").mouseleave(function(){
                         console.log("鼠标离开");
                     });
                     
                     $("#box").mousedown(function(){
                         console.log("鼠标按下");
                     });
                     
                     $("#box").mouseupon(function(){
                         console.log("鼠标抬起");
                     });
                     
                     $("#box").mousemove(function(){
                         console.log("鼠标移动");
                     });
                 });
             
         hover事件 一个模仿悬停事件(鼠标移动到一个对象上面及移除这个对象)的方法
         语法:hover([fnOver],fnOut) 
         fnOver 鼠标移到元素上要触发的函数;fnOut表示鼠标移出时要触发的函数
         当鼠标移动到一个匹配的元素上面时(mouseenter)会触发指定的第一个函数,当鼠标移出这个元素(mouseleave)时,会触发指定的第二个函数
         实例代码:
             <script>
                 $(function(){
                     $("#box").hover(function(){
                         console.log("鼠标进入");
                     },function(){
                         console.log("鼠标离开");
                     });
                 });
             </script>
         
         event事件对象-event属性
             属性-描述(事件)
             altKey-事件触发时是否按下了alt键(鼠标事件)
             ctrlKey-当事件触发时是否按下了ctrl键(鼠标事件)
             shiftKey-当事件触发时是否按下了shift键(鼠标事件)
             button-当事件触发时是按的鼠标的那个键(鼠标事件)
             clientX-设置或获取最标指针位置相对于窗口客户区域的x坐标,其中客户区域不包括窗口自身的控件和滚动条。(鼠标事件)
             clientY-设置或获取鼠标指针位置相对于窗口客户区域的y坐标,其中客户区域不包括窗口自身的控件和滚动条。(鼠标事件)
             keyCode-得到被按下键的ASCESC 编码(键盘事件)
             type-返回当前Event对象表示的事件的名称(任意事件)
             target-最初触发事件的DOM元素,特指事件触发源event.target(任意事件)
             currentTarger-在事件冒泡阶段中的当前DOM元素,特指当前事件源(任意事件)
             data-当前执行的处理器被绑定的时候,包含的数据传递(任意事件)
         event事件对象-event方法
             stopPropagation 阻止事件冒泡(任意事件)
             preventDefault  阻止事件的默认动作(任意事件)
             事件冒泡:事件会按照DOM的层次结构像水泡一样不断向上直至顶端
             实例:阻止文档中的class="child"的元素事件派发
             实例代码:
             <script>
                 $(".child").on("click",function(event){
                     console.log("子元素响应事件");
                     event.stopPropagation();
                 });
                 
                 $(".parent").on("click",function(){
                     console.log("父元素响应事件");
                 });
             </script>
             
             实例:阻止文档中元素的默认行为
             实例代码:
             $(".ling").on("click",function(event){
                 event.preventDefault();//阻止事件的默认动作
             });
     
     15.jQuery DOM操作【重中之重】
         15.1 jQuery捕获
         jQuery 中提供了一系列与DOM相关的方法,使得访问和操作元素和属性很简单
         DOM = Document Object Model (文档对象模型)
         DOM定义访问HTML和XML文档的标准
         W3C文档对象模型独立于平台和语言的界面,允许程序和脚本动态访问和更新文档的内容、结构及样式
         
         获取内容-text()、html()、val()。三个简单实用的用于DOM操作的jQuery方法
         text() -设置或返回所选元素的文本内容
         html() -设置或返回所选元素的内容(包括HTML标记)
         val()  -设置或返回表单字段的值
         实例:通过text()和html()方法来获取内容、通过val()方法获取输入字段的值
         <body>
             <p id="test">这是段落中的 <b>粗体</b> 文本。</p>
             <button id="btn1"> 显示文本</button>
             <button id="btn2"> 显示HTML</button>
             
             <p>名称: <input type="text" id="test1" value="jQuery教程"></p>
             <button id="btn3">显示值</button>
         </body>
         <script>
             $(function(){
                 $("#btn1").click(function(){
                     alert("Text:"+$("#test").text());
                 });
                 
                 $("#btn2").click(function(){
                     alert("HTML:"+$("#test").html());
                 });
                 
                 $("#btn3").click(function(){
                     alert("值为:"+$("#test1").val());
                 });
             });
         </script>
         
         attr() -此方法用于获取自定义的DOM属性值
         实例:获取href属性的值
         <a href="www.runoob.com" id="powernode">jQuery</a>
         <script>
             $(function(){
                 $("button").click(function(){
                     alert($("#powernode").attr("href"));
                 });
             });
         </script>
         
         prop() -获取HTML元素本身带有的固有属性,快读准确
         注意:在select和radio和checkbox中我们取selected checked属性应使用prop
         
         15.2 jQuery设置
             设置内容-text()、html()、val()
             text()-设置或返回所选元素的文本内容
             html()-设置或返回所选元素的内容(包括HTML标记)
             val() -设置或返回表单字段的值
             实例:通过text()、html()、val()设置内容
             实例代码:
                 $(function(){
                     $("#btn1").click(function(){
                         $("#test1").text("hello world");
                     });
                     $("#btn2").click(function(){
                         $("#test2").html("<b>hello world!</b>");
                     });
                     $("#btn3").click(function(){
                         $("#test3").val("powernode");
                     });
                 });
             
             text()、html()、val()的回调函数,回调函数有两个参数,被选元素列表中当前元素的下表,以及原始值。然后以函数新值返回希望适用的字符串。
             实例:带回调眼熟的text()、html()
             实例代码:
                 $("#btn1").click(function(){
                     $("#test1").text(function(i,origText){
                         return "旧文本:"+origText+"新文本:hello world!(index:"+i+)";
                     });
                 });
                 
                 $("#btn2").click(function(){
                     $("#test2").html(function(i,origText){
                         return "旧html:"+origText+"新html:<b>hello world<b>(index:"+i+")";
                     });
                 });
             注意:html(function(index,html)) index为元素在集合中的索引位置,html为原先的HTML值
            设置属性-attr()
             attr()方法也可用于设置/改变属性值
             实例:设置(改变)链接中href属性的值
             实例代码:$("#powernode").attr("href","www.powernode.com");
             
             实例:设置改变href和title,两个属性
             实例代码:$("#powernode").attr({"href":"www.powernode.com","title":"标题"});
             
             attr的回调函数,有两个参数,分别为被选元素列表中当前元素的下标,以及原始的旧值。然后以函数新值返回希望适用的字符串。
             实例代码:
                 $("button").click(function(){
                     $("#powernode").attr("href",function(i,origValue){
                         return origValue + "/java";
                     });
                 });
                 
             设置属性-prop()    
             对于HTML元素本身就带有的固有属性,在处理时,使用prop方法。快速,准确。
            对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法。
             
             注意:在select和radio和checkbox中我们取selected checked属性应使用prop
                 
         15.3 添加元素
             添加新的HTML内容
             append() -在被选元素的内部结尾添加内容
             prepend() -在被选元素的内部开头添加内容
             after() -在被选元素之后插入内容
             before() - 在被选元素之前插入内容
             
             实例代码:
                 $("p").append("追加文本");
                 $("p").prepend("开头追加文本");
                 $("img").after("在后面添加文本");
                 $("img").before("在前面添加文本");
         15.4 删除元素
             remove() -删除被选元素及其子元素,remove()方法支持接收1个参数,允许对被删除元素进行过滤,参数可以是jQuery任何选择器的语法
             empty() -从被选元素中删除子元素
             
             实例代码:$("#div1").remove();$("#div2").empty();$("#div3").remove(".italic");
         15.5 jQuery CSS 类
             jQuery拥有若干进行CSS操作的方法,常用如下:
             addClass() -向被选元素添加一个或多个类
             removeClass() -向被选元素删除一个或多个类
             toggleClass() -向被选元素进行添加/删除类的切换操作
             css() - 设置或返回样式属性 
             
             实例样式表
             .important
             {
                 font-weight:bold;
                 font-size:xx-large;
             }
             
             .blue
             {
                 color:blue;
             
             }
             
             addClass()实例代码:向不同元素添加class属性
             $("button").click(function(){
                 $("h1,h2,p").addClass("blue"); --选取多个元素添加
                 $("div").addClass("important"); -- 选取单个元素添加
                 
                 $("#div1").addClass("import class"); -- 添加多个类 
             });
             
             removeClass()实例代码:在不同的元素中删除指定的class属性
             $("button").click(function(){
                 $("h1,h2,p").removeClass("blue");
             });
             
             toggleClass()实例代码:对被选元素进行添加/删除类的切换操作
             $("button").click(function(){
                 $("h1,h2,p").toggleClass("blue");
             });
             
             css()实例代码:设置或返回被选元素的一个或多个样式属性 
             返回指定的css属性的值语法:css("propertyname"); 
             实例:返回被选元素的background-color值  实例代码:$("p").css("background-color");
             
             设置执行的css属性的值语法:css("propertyname","value");
             实例:将所匹配元素的background-color设置为yellow 实例代码:$("p").css("background-color","yellow")
             
             设置多个css属性语法:css({"propertyname":"value","propertyname":"value"...})
             实例:将所匹配元素设置background-color和font-size 实例代码:$("p").css({"background-color":"yellow","font-size":"200%"})
     16.jQuery和DOM对象互转【重点】
         16.1 jQuery转换成DOM对象
             两种转换方式:[index]、.get(index)
             jQuery对象是一个数据对象,可以通过[index]的方法,来得到一个DOM对象 
             例如 var vj = ("#v");//jQuery对象 
                 var vd = $vj[0]; //DOM对象 
                 alert(vd.checked); //检测这个checkbox是否被选中 
                 
             jQuery本身提供.get(index)方法,得到相应的DOM对象 
             例如 var vj = ("#v"); //jQuery对象 
             var vd = $vj.get(0); //DOM对象 
             alert(vd.checked); //检测这个checkbox是否被选中
         
         16.2 DOM转换为jQuery对象 
             用()将DOM对象包装起来,即可转换为jQuery对象
             例如 var vd = Document.getElementByID("v"); //DOM对象 
                  var vj = (vd); //jQuery对象 
             转换之后,可任意适用jQuery的方法。
         
         注意:DOM对象才能适用DOM对象的方法,jQuery对象不可适用DOM对象的方法
         
     17.表单处理【掌握】
         17.1 解决表单提交的冒泡问题
         实例代码
         <body>
         <form action="#" method="get" id="frm">
             ID:<input type="text" id="id" name="id"> <br>
             NAME:<input type="text" id="name" name="name"> <br>
             <input type="button" id="doSubmit" value="提交">
             <input type="button" id="doReset" value="提交">
         </form>
         </body>
         
         <script>
             $(function(){
                 $("#doSubmit").click(function(){
                     console.log("doSubmit点击事件被触发");
                     $("#frm").submit();
                 });
                 
                 $("#doReset").click(function(){
                     $("#frm")[0].reset();//通过js去重置,在jquery里的表单对象没有reset方法,适用原生js中的reset方法
                 });
             });
         </script>
         
         17.2 serializeArray()和 serialize()的区别
             serializeArray()返回一个JSON数组,里面是表单属性的name的属性值和value
             serialize()返回的是一个查询参数,例如id=1&name=2&gender=3&sal=4
     
     18.jQuery each()方法 【掌握】
         语法:$(selector).each(function(index,element))
         作用描述:为每个匹配元素运行规定的函数,index表示选择器的index位置,element表示当前的元素,也可用this代替
         
         实例:循环JSON数组生成无刷新的table并能删除和添加
         <!DOCTYPE html>
        <html>
         
         <head>
         
             <meta charset="UTF-8">
         
             <title>01表单处理.html</title>
         
             <!--引入jquery-->
         
             <script src="../js/jquery-3.6.0.js" charset="UTF-8"></script>
         
         
         
         </head>
         
         <body>
         
         <h1>添加用户</h1>
         
         <form id="userAddFrm" action="#" method="get">
         
             ID:<input type="text" name="id">
         
             NAME:<input type="text" name="name">
         
             SEX:<input type="radio" name="sex" checked value="男">男 <input type="radio" value="女" name="sex">女
         
             SAL:<input type="text" name="sal">
         
             <input type="button" id="doSubmit" value="添加">
         
             <input type="reset" value="重置">
         
         </form>
         
         <hr>
         
         <h1>用户列表</h1>
         
         <table id="userTable" width="100%" border="1" cellspacing="3" cellpadding="3" style="border: 1px solid green">
         
         
         
         </table>
         
         </body>
         
         <script>
         
             //声明一个json数组的容器
         
             let users=[{"id":1,"name":"小明","sex":"男","sal":5998.00}
         
             ,{"id":2,"name":"小红","sex":"女","sal":1998.00}
         
             ,{"id":3,"name":"小丽","sex":"女","sal":2998.00}
         
             ,{"id":4,"name":"小芳","sex":"女","sal":3998.00}]
         
         
         
             //数据初始化的方法
         
             function  initTableData(){
         
                 let userTable=$("#userTable");
         
                 let html="<tr><th>ID</th><th>NAME</th><th>SEX</th><th>SAL</th><th>操作</th></tr>"
         
                 $.each(users,function (index,item){
         
                     html+="<tr><th>"+item.id+"</th><th>"+item.name+"</th><th>"+item.sex+"</th><th>"+item.sal+"</th><th><input type='button' οnclick='del("+item.id+")' value='删除'></th></tr>"
         
                 })
         
                 userTable.html(html)
         
             }
         
             initTableData();
         
         
         
             //监听添加按钮的事件
         
             $("#doSubmit").click(function (){
         
                 let userAddFrm=$("#userAddFrm");
         
                 let arrays=userAddFrm.serializeArray()
         
                 let jsonObj={};
         
                 $.each(arrays,function (index,item){
         
                     jsonObj[item.name]=item.value;
         
                 })
         
                 //把组装好的json对象放到users数组里面
         
                 users.push(jsonObj);
         
                 //刷新表格
         
                 initTableData()
         
             })
         
             function del(id){
         
                 //循环users找到id=传入id这个对象,再删除
         
                 $.each(users,function (index,item){
         
                     if(item.id==parseInt(id)){
         
                         //删除
         
                         users.splice(index, 1);
         
                         //刷新表格
         
                         initTableData()
         
                         return;
         
                     }
         
                 })
             }
         </script>
