jQuery知识点笔记

1.定义:第三方的 极简化的 DOM操作的 函数库。

    (1) 应用:

        1).DOM的终极简化(简化增删改查,简化事件绑定,简化动画,简化ajax...)。

        2).几乎对所有浏览器没有兼容性的问题。

    (2) 如何快速学会一门技术:看官网是什么,看官网快速入门,看手册。

    (3) jQuery版本:1.x不支持旧浏览器,2.x支持旧浏览器,3.x支持旧浏览器并增

         加特性(如API都是运行在严格模式下,支持for..of代替each,支持动画API,

         支持promise....)。

    (4) 引入jQuery:即向window中添加一种新的类型jQuery,包括构造函数/工厂函

         数和原型对象,其API只能被jQuery类型的子对象引用。普通DOM无法使用。

        1).将jQuery.js文件保存在本地文件中,在页面用<script src="本地相对路

           径">。

        2).引用网络CDN(内容分发网络)中的jQuery.js文件<srcipt src="网络绝对

           路径">。官网=>CDN=>绝对路径。

2.jQuery对象即封装所有DOM对象的类数组对象,并提供操作DOM对象的简化版API。

           构建DOM Tree=>查找触发事件的元素=>绑定事件=>查找要修改的元素=>修改

           元素(内容,属性,样式...)。

    (1) 创建:

         1).var $obj=new jQuery("选择器"); 对jQuery对象调用任何简化版本的

            API相当于自动把其中的每个DOM元素都引用一遍简化API——自带遍历。

         2).var $obj=jQuery(DOM对象);基于已经找出获得DOM对象,将其封装为

            jQuery对象。 所有jQuery可以被$替代。

    (2)jQuery API的三大特性:

        1).自带遍历效果;如对$btns.click(),其里面的每个btn自动调用click();

        2).一个函数两用;如 elem.html(['新内容']),如果括号里面有内容为修改,

            没有内容为获取。

         3).多数简化的API都是返回的是正在操作的jQuery对象,所有可以有$().css()

          .css(),或$().mouseover().mouseout()的链式操作。

    (3)jQuery对象可用的选择器:

        1).基本选择器,包括css中的5种:id选择器,元素选择器,class类选择器,通

        配选择器(*),群组选择器(selector1,selector2,...)。选择器名中含有特殊字

        符jQuery可用双\\对其进行转义,如正则表达式类型的选择器名。

DOM:API

jQuery:API

document.getElementById("#id");

$("#id");

document.getElementsByTagName("element";)

$("element");

document.getElementsByClassName("ClassName");

$("ClassName");

Document.getElementsByTagName("*");

$("*");

...........无............

$("群组选择器");

       

 

        2).结构选择器,包括CSS中的4种:相邻兄弟选择器(+),通用兄弟选择器(~),

           子代选择器(>,包括:first-child,:last-child,:nth-child(n),:only-

           child),后代选择器( )。以及jQuery中自带的子代选择器::eq(n/even/odd)

          ,表示从0开始第n个/所有偶数/所有奇数。

        3).过滤选择器:jQuery自带的定位过滤选择器:

         :first,:last,:not(),:even,:odd,:eq(),:gt(),:lt(),:header(h#标签),

        :animated(正在执行的动画)。其中:even,:odd,:eq(),:gt(),:lt()都是从0

         开始计算。

                       jQuery自带的内容过滤选择器:

        :contains("文本内容"),:empty,:has("selector"),:parent。

        其中:hidden,:visible。是匹配所有隐藏/可见的元素。

        4).属性选择器:[attribute],[attribute=value],[attribute!=value],

           [attribute^=value],[attribute$=value],[attribute*=value],

           [selector1][selector2][selector3]。其中*=表示包含某值。

        5).表单选择器::input(匹配所有表单元素),:text(匹配文本框),:password,

           :radio,:checkbox,:submit,:image(type="image"),:reset,:button,

           :file,:hidden

    (4) jQuery选择器优化:

        1).多用ID选择器;缩短节点访问路径。

        2).少直接用Class选择器。

        3).多用父子关系,少用后代关系。

        4).缓存jQuery对象,即将其赋值给一个变量。

    (5) jQuery对象的过滤方法(强调不是选择器是用.访问的方法):

          .eq(n);获取第n个元素;

          .hasClass(className);判断是否有某className;

          .filter(expr/fn);筛选出满足表达式expr/函数返回值的元素集合;

          .is(expr);判断是否至少有一个满足表达式expr的元素。

          .has(expr);保留满足表达式的元素。

          .not(expr);排除满足表达式的元素。

          .slice(start[,end]);截取子元素集合。

 

3.查找:

    (1) 属性选择器查找;未获得任何元素下,查找第一个元素,jQuery支持所有CSS选

         择器,并还有自带的选择器。jQuery选择器返回值均是一个伪数组对象,如果没

         有就返回空的伪数组对象,判断一个jQuery对象是否存在,不能使用$("选择器

         ")而是应该用$("选择器").length是否大于0判断其是否是空伪数组对象。

    (2) 节点间关系查找;已获得一个元素,找其父,后,兄,弟元素。

        1).父子:$elem.parent()  => elem.parenElement;其中$elem.parents()

                                    是查找$elem所有祖元素。

                 $elem.children(/*[选择器]*/) => elem.children;

                        只能查找直接子元素,可以用$().find(["selector"])去查

                        找所有子元素/或查找指定选择器的子元素。

                 $elem.children().first() => elem.firstElementChild;

                 $elem.children().last() => elem.lastElementChild;

        2).兄弟:$elem.prev() => elem.previousElementSibling;

                               $()/$elem.prevAll(),查找之前的所有兄弟。

                 $elem.next() => elem.nextElementSibling;

                               $()/$elem.nextAll(),查找之后的所有兄弟。

                               $().siblings(["selector"]),查找除自己之外的所

                                   有兄弟或除自己之外的指定选择器兄弟。

4.修改:

    (1) 内容:

        1).$().html(['新内容HTML片段']) => .innerHTML="新内容";不支XML。

        2).$().text()   => .textContent;文本内容。

        3).$().val()   =>   .value; 表单元素的值。

        4).$().empty() ;清空元素集合中所有内容/所有子节点。没有参数。

    (2) 属性:

        1).标准属性;$elem.attr("属性名"[,"属性值"]) => elem.属性名=值;

                     $().attr((css属性:值,css属性:值...));

                     $()/$elem.removeAttr("属性名");表示删除属性。

        2).状态属性;$elem.prop("状态属性名"[,bool]) => elem.属性名=bool;

                    $()/$elem.removeProp("属性名");表示删除属性。

        3).自定义属性;$().data("属性名"[,"值"])  => elem.dataset.属性名;

    (3) 样式:

        1).$().css("css属性名")  => getComputedStyle(elem).css属性;

            修改:$().css("css属性名",值)  =>  elem.style.css属性名; 一次

                      修改一个样式。

        2).$().css({属性名:值,属性名:值...});

        3).$().addClass/removeClass/hasClass("class1

                class2....");用class批量应用增/删/判断存在属性;hasClass()相

                当于is();

        4). $().toggleClass("class1");如果属性存在就删除,否则就添加相当于

            if(.hasClass()){.removeClass()}else{.addClass()};

5.添加,删除,替换,克隆:

    (1)添加:用html代码片段创建新元素:var $elem=$("html片段");

             将新元素添加到父元素下:

            $parent.append($elem);//return $parent

            $elem.appendTo($parent); //return $elem

            $parent.prepend($elem);

            $elem.prependTo($parent);

            $child.before/after($elem);//return $child

            $elem.insertBefore/insertAfter($child);//return $elem

    (2)删除:$().remove([selector]);从DOM中删除所有满足参数/匹配元素及其内

           容,可有参数。返回被删除的元素。$().detach([expr]),表示移除并保留元

           素及其内容,以便下次使用。如,用.detach([expr])移除单击事件中的某代

           码,当再次回复被删除的内容时,再次单击仍然可有有效执行,如果换成

           remove()就不行了。

    (3)替换:

        $(旧).replaceWith(新);  //return $(旧)。

        $(新).reolaceAll(旧);  //return $(新)。

    (4)克隆:

        浅克隆;var $elem=$().clone();仅克隆样式和属性。

        深克隆;var $elem=$().clone(true);克隆样式,属性和行为。

    (5)链式操作中addBack()和end()方法:

        1).$("div").find("p").addBack().css();表示把$("div")和$("div").

                     find("p")绑定在一起新成新jQuery对象执行.css()方法;  

        2).$("div").find("p").css(1).end().css(2);表示对$("div").find("p")

                     执行css(1),并返回$("div")对其执行css(2);

    (6)包裹元素:即为某一个元素里/外包裹一个子/父元素。

        1).外包:即为匹配的每个元素外包一个标签元素,参数可有是字符串或对象。

                $("a").wrap("<li></li>");表示为匹配的每个a外包裹一个li标签。

        2).内包: 即为匹配的元素内包一个标签元素。

                $("body").wrapInner("<ul></ul>");表示在body下内嵌一个ul。

        3).总包:即为匹配的元素集合作为一个整体外包一个标签元素。

                $("ul").wrapAll("div");表示为匹配ul整体外包裹一个div标签。

        4).卸包:即为匹配的元素去掉父元素,没有参数。与wrap()相反。

                $("a").unwrap(); 即去掉a的父元素,保留自身。

6.事件绑定:共6种方法。

    (1).bind/unbind():简化addEventListener/removeEventListener;

        unbind()三种重载:unbind("click",handler)移除指定元素的click的

        handler函数;unbind("click")移除指定元素的click事件绑定的所有处理函

        数;unbind()移除指定元素上所有事件的所有处理函数。bind("事件名",[参数,]

        事件函数);或bind({事件1:事件函数1,事件2:事件函数2.....})。   (2).one():只触发移除,触发后自动解绑。

    (3)delegate/undelegate():对利用冒泡的简化,this ->父元素,e.target->目标

        元素,delegate将this->e.target;且delegate添加了选择参数,自动执行

        is判定。与bind相比其直接绑定在父元素上减少监听个数,且可以让新生成的元

        素自动获得父元素的处理函数。

    (4) live/die()...;jQuery1.9版本之后已经删除用on/off代替。

    (5)on/off();on()两种重载,代替bind,on("事件名",handler)。代替delegate,

                 on("事件名","selector",handler)。

    (6)直接事件绑定; $().事件名(handler)。其中var bool=$().is("selector")用

                     于判断$()下的一个元素是否满足选择器selector条件。var i=

                     $(child).index()查找child在其父元素下的位置。

7.其他具体事件:

    (1)页面加载自动执行时间;

        1).DOM内容(css,html)加载完成后执行:$(document).ready(function(){})        或简化为$().ready(function(){})或更简化$(()=>{});

        2).所有页面内容(HTML,CSS,JS,图片...)加载完成之后:window.onload=

           function(){};或$(window).load(function(){});

    (2).鼠标事件;mouseover(),mouseout(),mouseenter(),mouseleave():前2个和

        后2个相比在于频繁进出是否触发父元素上的事件即冒泡。简写$().hover

        (mouseenter(),mouseleave());其中hover(鼠标移入函数事件,鼠标移出函数事件);

    (3).模拟触发;用程序触发一个元素上的事件处理函数,$().trigger("事件名")

        简化为$().事件名();

 

7.动画:动画的API参数大0都可以有时间ms,和动画执行完之后执行的函数。

    (1).简单动画:用定时器实现动画不如css的transition,且在jQuery中不便维护。

        1).显示/隐藏:show(),hide(),toggle();默认不带参数,用display实现瞬间

           显示隐藏不支持动画,加ms参数才有动画效果。

        2).上滑动下滑动:slideUp(),slideDown(),slideToggle();

        3).淡入淡出:fadeIn(),fadeOut(),fadeToggle();

    (2).万能动画:$().animate({css属性:目标值,....},ms,callback);但是其仅支

                 持单个数值的属性,不支持动画演示,字体,转换等属性.但是可随时

                 停止动画$().stop(/*true*/)参数为true表示停止当前动画并清空

                 动画排对;其中$().动画API(ms,callback)表示动画执

                 行完以后会自动执行的函数。其this指正在播放动画的DOM元素。

                 :animated该表示正在执行动画的选择器($().is(":animated"))表

                 示判断某个jQuery对象$()是否是正在执行的动画。以及delay(ms)延迟动画执行。

    (3).排队和并发:排队指对同一个元素反复调用多个动画API,而动画API是排队触

        发的,并发是多个CSS属性同时发生,如在animate{}里内修改多个属性。

8.类数组操作:

    (1).$().each(function(i,elem){});对当前类型数组里面的元素依次遍历。 VS

         $.each(obj.function(){});前者在jQuery原型对象中,$()调用的对象必须

         是jQuery对象,后者是直接存在在构造函数中,obj可以是任何类型的数组对象。

    (2).$().index();包括$("所有").index(DOM元素)和$(子元素).index();都是查

         找子元素的对象;

 

9.jQuery插件设计原理:jQuery.extend()和jQuery.fn.extend();分别表示创建构造

                        函数和父对象函数。其中extend可以有函数名代替。一般前者

                        定义属性,后者定义方法。

    (1).jQuery.fn.自定义函数=function(){//this指将来调用jQuery类型子对象,

                   且不用再用$()封装这个自定义函数了,可$(this)将this转为为

                   jQuery对象}。

    (2).jQuery.自定义函数=function(){// 定义jQuery构造函数对象}。

    (3).自定义jQuery选择器:步骤如下;

            1).创建自定义选择器名及其方法函数,如:le:function([参数]){};

            2).将选择器添加到jQuery选择器对象中,jQuery.expr[":"].le;

            3).调用自定义选择器,.le([参数]);

    (4).优化/重新jQuery选择器:即与原生选择器重名,两种方法如下;

            1).直接覆盖;与自定义选择器步骤一样。

            2).直接嵌入jQuery构造函数中;jQuery.extend(jQuery.expr[":"],{

               "重名选择器名":function(){});

    (5).封装插件;(function($){//自定义构造函数和父对象函数})(jQuery);

猜你喜欢

转载自blog.csdn.net/qq_42231156/article/details/83054204