jQuery和zepto基础知识点

本文详细介绍了jQuery和zepto的基础知识,包括两者的关系、使用步骤、对象转换、选择器、DOM操作、事件处理、动画效果以及移动端zepto的特点和与jQuery的区别。通过实例解析了jQuery中的常用方法,如DOM操作、事件绑定与解绑,同时也探讨了zepto在移动端的优势和特有的事件处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 概念   

$()  等价于   jQuery()

JavaScript(ECMA/DOM/BOM) -> 在实际开发中,使用比较麻烦,浏览器的兼容问题

- JavaScript类库(JS库)

   - 目的 - 就是为了简化JavaScript的开发

   - 实现 - 使用JavaScript中的函数和对象进行封装

      * 我们只需要掌握如何使用,而不需要了解如何实现

 * 目前版本

  -1.x版本 - 几乎兼容所有浏览器

  -2.x版本 - 不再兼容IE所有浏览器

  -3.x版本 - 不再兼容IE8之前的版本

  * 四个模块

    * jQuery - 针对PC端浏览器

    * jQuery UI - 针对样式

    * jQuery Mobile - 针对移动端浏览器

    * Qunit - 针对前端测试

- jQuery对象

  -jQuery对象与DOM对象

    * DOM对象 - 通过DOM提供的属性或方法获取的页面元素

    * jQuery对象 - 通过对DOM对象的封装产生的对象

    * jQuery的底层还是DOM内容

 * 注意 - 在实际开发中,DOM和jQuery可能混合使用

jQuery的编程步骤

1,首先在<head>标签中引入jQuery文件,使其先于<body>标签加载

- 在逻辑代码实现之前引入即可

2,通过jQuery的选择器获取指定元素

3,通过jQuery提供的属性或方法完成需求

- 用法:

* 使用选择器,获取HTML页面中的指定标签

* 返回值:为一个jQuery对象

- 例如:

var$username=$username(‘选择器’);

- 工厂函数 - $()或jQuery()

    - 用法:作为jQuery的入口

    - 作用:1,传递jQuery的选择器定位页面的元素

           2,将DOM对象转换为jQuery对象

DOM对象和jQuery对象之间的转换

- DOM对象:通过DOM操作获取页面的元素

 jQuery对象:封装DOM对象产生的对象(底层还是DOM对象)

- 将DOM对象转换为jQuery对象

    通过jQuery的工厂函数 - $(DOM对象)  -> 将其转化为jQuery对象】

- 将jQuery对象转换为DOM对象

    1,jQuery对象是类数组对象,通过索引值来转换   $username[0];

    2,jQUERY提供了get(index),也是索引值来转换  $username.get(0);

* 获取input中的内容,DOM使用   元素.value

                     jQuery使用    $元素.val(),若里面没有写代码,表明是调用val()值;若里面写有代码,表示往里面写入属性值

jQuery具有完善的处理机制 

- 使用DOM来获取页面元素失败时,会报错

- 使用jQuery来获取页面元素失败时,并不是报错而是返回 undefined 。因为jQuery底层将错误做了预处理。

好处:拥有相对完善的处理机制

坏处:很难判断错误的位置和原因

基本选择器

- Query与CSS的选择器的区别

   -jQuery的选择器用法是源于CSS选择器的用法

   - jQuery的选择器扩展了CSS的选择器

- 分别 - 九大选择器

      * 基本选择器

      * 层级选择器

      * 过滤选择器 - 前缀 : + 选择器

        * 基本过滤选择器

        * 内容过滤选择器

        * 可见性过滤选择器

        * 属性过滤选择器(使用中括号)

        * 子元素过滤选择器

        * 表单对象属性过滤选择器

      * 表单选择器

- 改变背景颜色,可以通过CSS操作实现

* 使用 css(‘样式名,‘样式值’);

- 匹配多个元素时,不需要循环操作 -因为jQuery底层做了预处理

-  $(‘#one + div’);    + 在这里的意思是:查找id为one的下一个div兄弟元素

$(‘#one ~ div’);    ~ 在这里的意思是:查找id为one后面的所有兄弟元素

* 基本过滤选择器

     :not(选择器)       :odd          :even

 :gt(num)       :lt(num)     :header        :animated

* 内容选择器

:contains(内容)       :empty        :has(选择器)        :parent

* 可见性选择器

:visible       :hidden

* 属性过滤器

    元素[含有的属性]        元素[属性名=属性值] (相等的属性值   !=) 

元素[^= ]以什么开始        元素[ $= ]以什么结束      元素[ *= ][]含有

* 子元素过滤选择器(父元素的第几个子元素)

    nth-child(index)   这里面的index是从 1 开始的

    - $(‘div :nth-child(num)’) – 获取div父元素的第num个子元素

      $(‘div:nth-child(num)’) -  获取第二个div子元素

元素:first-child   父元素的第一个子元素     

元素:last-child   父元素的最后一个子元素    

    元素:only-child  只有一个子元素

-attr(属性,属性值);

-siblings()其他的兄弟元素

* 循环遍历

方法一:$( ).each( function(index,domEle){ }) 

 * 只能使用jQuery对象来调用

- 参数    - 回调函数

-index   - 表示循环遍历的索引值

-domEle   - (DOM对象)表示循环遍历过程中得到的每个元素

* text() –只能在jQuery情况下调用,表示取得所有匹配元素包含的文本内容

$(domEle).text()    将domEle得到的DOM对象转化为jQuery对象后调用text()方法

方法二:jQuery(或 $).each(object,function(index,domEle){ })

-object  - 他可以是循环遍历的对象或是数组,还可以是jQuery对象

用法和(方法一)一样

表单对象属性的过滤操作

- input:disabled     - 表示对不可用框进行操作

- input:enabled      - 表示对可用框进行操作

- input:checked      - 表示匹配所有的单选框、复选框中被选中的元素

 length    - 表示被选中的长度

- option:selected    - 表示选中的所有option元素

- $元素:hide()     - 将元素隐藏

- $元素:show()     - 将元素显示

- $元素.is(属性)    - 判断$元素里面是否含有属性,若有属性则返回true,若没有则返回false

jQuery的DOM操作

   - 基本操作

     -html() - 相当于DOM中的innerHTML属性的作用

       * html() - 获取指定元素的HTML代码内容

       * html(html) - 设置指定元素的HTML代码内容

     - text() - 相当于DOM中的textContent属性的作用

       * text() - 获取指定元素的文本内容

       * text(text) - 设置指定元素的文本内容

     - val() - 相当于DOM中的value属性值的作用

       *val() - 获取指定元素的value属性值

       * val(value) - 设置指定元素的value属性值

     - attr() - 相当于DOM中的getAttribute()和setAttribute()的作用

       * attr(attrName) - 等价于getAttribute()(attrName为style)

       例如:元素.attr(‘style’,’height:300px’);

    * 通常使用jQuery对象设置属性时,属性和属性值都需要加上‘’(引号),如果属性值,是存放在一个变量里面的,使用变量来设置属性,此时可不加引号。

       * attr(attrName,attrValue) - 等价于setAttribute()

       * removeAttr(attrName) - 等价于removeAttribute()

   - 样式操作

     - 通过属性操作 - style或class属性

       - attr()和removeAttr()方法

       * 注意 - 设置属性(将原有样式删除,替换成新的样式)

     - css()方法 - 直接操作CSS中的样式, 获取或设置一个CSS样式

         - css(attrName,attrValue) - 设置指定的CSS样式

         * css(attrName) - 获取指定的CSS样式(width,heigtht,background)

       例如:元素.css(‘height’,’300px’);

       - css(Object类型) -同时设置多个CSS样式

       - addClass(className) - 追加样式

         * 注意 - 不会改变指定元素的原有样式内容

       - removeClass() - 删除样式

           * 当不传参数时,表示删除所有样式

       * 传递多个指定样式时,中间使用空格隔开

       - toggleClass(className) - 切换样式

       * 表示在没有样式和指定样式之间进行切换,效果相当于使用addClass()和removeClass()方法。

       -hasClass(className) - 判断是否含有指定样式

   * 遍历元素

     - 祖先元素与后代元素

       * 祖先元素 -parents()

       * 后代元素 -find(expr)

     - 父元素与子元素

       * 父元素 - parent()

       * 子元素 -children()

     - 兄弟元素

       * 上一个兄弟元素 -prev()           前面所有的兄弟 – prevAll()

       * 下一个兄弟元素 - next()           后面所有的兄弟 - nextAll()

       * 所有兄弟元素 -siblings()

         后面所有兄弟元素 -$(target ~ element)

   * 创建节点

     - 元素节点 - $(HTML代码)

       * 注意 - HTML代码必须是字符串类型

     - 文本节点 - text()

     - 属性节点 - attr()

   - 删除节点

     - remove() - 删除哪个元素,哪个元素调用

       * 结果 - 既删除自身元素,也删除所有后代元素

     - empty() - 删除哪个元素,哪个元素调用

       * 结果 - 删除所有后代元素,而保留自身元素

       * 在实际开发中,适用于清空操作

   - 复制节点(了解)

     - jQuery中的复制节点 -clone(boolean)

       * boolean参数 - 表示是否复制事件

       * 默认值为 false,不复制事件

     - DOM中的复制节点 -cloneNode(boolean)

       * boolean参数 - 表示是否复制后代节点

       * 默认值为 false,不复制后代节点

   * 插入节点

     - 内部插入节点 - 父元素与子元素(向父元素插入子元素)

       - A.append(B) –将B插在A的后面

       - A.prepend(B) – 将B插在A的前面

 - A.appendTo(B) – 将A插在B的后面

       - A.prependTo(B) – 将A插在B的前面

     - 外部插入节点 - 兄弟关系的元素(向指定元素插入前一个或后一个兄弟元素)

       - A.before(B) – 将B插在A的前面

       - A.after(B) – 将B插在A的后面

       - A.insertBefore(B) – 将A插在B的前面

       - A.insertAfter(B) – 将A插在B的后面

   * 替换节点

     - 被替换元素.replaceWith(替换元素)

- 替换元素.replaceAll(被替换元素)

 页面的加载,ready()的编写方式:

   - $(document).ready(function(){ }) - 等价于 window.onload

       - 速度快 - 必须等待HTML页面的DOM结构加载完毕之后,再执行

       -具有简化写法

         *$().ready(function(){ })

         * $(function(){ }) - 实际开发

       * 允许编写多个

     * window.onload

       - 速度慢 - 必须等待HTML页面所有的内容全部加载完毕之后,再执行

       - 没有任何的简化写法

       - 只能存在一个

   - ready 和onload之间的区别:

 与其他JS库冲突

     - 问题 - 集中在"$"符号的使用权冲突

     - 原则 - jQuery主动放弃"$"符号的使用权

     - 两种情况

       * 先引入jQuery文件 - $符号已经不是jQuery

   解决方案:

      1. 直接替换成 jQuery 来使用,将$()变成jQuery()来调用

  * jQuery.noConflict();表示jQuery()主动放弃 $ 的使用权,然后再使用后两种2,3的方法来解决冲突问题。

       2. 通过自调函数来解决

            (function($){

                // $ 依旧表示 jQuery 对象

               //将jQuery的逻辑代码编写在此处

            })(jQuery);

         3. 通过 ready() 方法来解决

            jQuery(function($){

                // $ 依旧表示 jQuery 对象

            })

       * 后引入jQuery文件 - $符号一定是jQuery

 事件的绑定与解绑

     - bind(type, data, fn)     绑定事件

       - type - 绑定的事件名称

       - data - (可选)作为event.data属性值传递给事件对象的额外数据对象

       - fn - 绑定事件的对应处理函数

     - unbind(type, fn)     解绑事件

       - type - 解绑的事件名称

       - fn - 解绑事件的对应处理函数,必须和bind()绑定的事件处理函数是同一函数。

   - 动画

     - 显示与隐藏 - 同时改变宽度和高度

       * show() - 显示

         - show() - 无参版本,没有动画效果

         - show() - 有参版本,具有动画效果

           - 参数 - slow、normal和fast预定义,自定义时间(毫秒)

       * hide() - 隐藏

         - hide() - 无参版本,没有动画效果

         - hide() - 有参版本,具有动画效果

           - 参数 - slow、normal和fast预定义,自定义时间(毫秒)

       *toggle() - show() + hide()     显示与隐藏的切换效果

   - 滑动效果 - 改变高度

       * slideUp()

         * 注意 - 并没有提供无动画版本

         - 不传递参数时 - 底层逻辑默认提供一个动画执行的时间

       * slideDown()

       * slideToggle() - slideUp() +slideDown()

         - 向上滑动与向下滑动的切换效果

   - 淡入淡出 - 改变透明度

       * fadeIn() - 淡入

       * fadeOut() - 淡出

       * fadeTo(speed, opacity) - 将指定元素的透明度改变到指定值

         - opacity - 表示设置透明度变化到的值

       - fadeToggle() - jQuery 1.4版本以后

   - 自定义动画

       * animate(params, [duration], [easing],[callback])

         - params - 表示用于实现动画效果的CSS样式属性

           * 格式 - Object类型

             { name : value, name : value,... }

         - duration - 表示用于实现动画所执行的时长,单位为毫秒

         - easing - 要使用的擦除效果的名称(需要插件支持)

         - callback - 表示动画执行完毕后的回调函数

       *animate(params, options)

         - params - 表示用于实现动画效果的CSS样式属性

           * 格式 - Object类型

             { name : value, name : value,... }

         - options

           * 格式 - Object类型

           - 选项

             - duration - 表示用于实现动画所执行的时长,单位为毫秒

             - easing - 要使用的擦除效果的名称(需要插件支持)

             - complete - 表示动画执行完毕后的回调函数

             - queue - 为true时排队效果,为false时并发效果

       - 两种用法的效果

         - 并发效果 - 同时改变多个CSS样式属性

            $('#panel').animate({

                left : 400,

                top : 400

            },3000)

         - 排队效果 - 多个CSS样式属性按照先后顺序依次改变

            $('#panel').animate({

                left : 400

            },3000).animate({

                top : 400

            },3000)

       * 注意 - 所有与颜色相关的 CSS 样式属性不能使用

         - background-color

         - border-color

         - color

jQuery类数组对象

   - 特点 - 允许存储多个元素,有序排列

   - 属性

     - length - 表示长度,指的是当前存储元素的个数

   - 方法

   - 循环遍历方法

       * $().each(function(index,domEle){})

       *$.each(object,function(index,domEle){})

  - toArray()方法

       - 将jQuery对象转换为真正的数组

       * 注意 - 只能操作 jQuery 对象

  -$.inArray(value, array)

       - 作用 - 表示判断指定的值value在指定数组array中的位置(索引值),也可以判断是否包含DOM对象。不能判断对象中是否包含属性或方法。

       * 注意

         - 如果数组包含指定的值 -返回对应的索引值

         - 如果数组不包含指定的值- 返回固定值 -1

- $.makeArray(obj)

       - 作用 –将类数组对象转换为数组对象

       * 注意

         * 类数组对象 - 不仅仅只是指 jQuery 对象,所有类数组对象都可以

 - JSON格式

   - $.parseJSON() - jQuery提供了将JSON字符串转换为JSON对象的方法

 - jQuery插件

   - 日期插件

     - 基本用法

       - 在HTML页面中引入插件文件

       - 为<input>标签设置 onclick 事件属性,值为 laydate() 方法

 

移动端zepto

* zepto同jquery不同的API

    *attr同prop

       jquery:标签的固有属性,布尔值属性<prop>

                标签的自定义属性,用attr布尔值属性并且布尔值属性在标签体内没有定义时候<attr>

       zepto:attr同样获取布尔值属性。

       

    *DOM操作

       配置对象:

           jquery不同使用配置对象添加id,class。。。

           zepto可以使用配置对象---结构,样式分离,而且容易管理

           

    *offset()----用来获取目标元素相对于视口的偏移量  对象

       jquery:top , left

       

       zeptop:top,left,width,height(content,补白,border)

       

    *width(),height()

       jquery:

           1、width(),height()  获取content内容区的值,没有单位

           2、.css  获取content内容区的值,有单位px

           3、 innerHeight()   content,padding没有单位

               innerHeight()   content,padding border没有单位

       zepto:

           1、width(),height()获取的content,补白,border

           2、没有innerHeight(),innerHeight()

           3、.css()

           

    *事件委托

       原理:利用冒泡的原理将事件绑定到父元素/祖先元素身上,event.target指向的子元素

       zepto:

           1、委托同一个父元素身上

           2、同一个世界

           3、操作关联,操作对应的元素/类

           4、顺序

           5、谁操作的关联类就是谁触发的

           

    *each

       jquery:能遍历数组,对象,不能遍历字符串/json对象/json数组

       zepto:能遍历数组,对象,字符串

       

    *隐藏元素的宽高

       jquery:能获取

       zepto: 不能宽,高

       

zepto的touch event

    *tap点击事件

    *singleTap()点击事件

    *doubleTap()双击事件

    *longTap()长按事件--连续作用750ms

    *滑动事件(浏览器的默认行为---翻页---touch-action)

       1、swipe滑动事件 在同一个方向连续滑动30px才为滑动,否则就是点击

jQuery和zepto的区别:

- 什么是zepto.js

    概念:移动端开发框架,是jquery的轻量级代替品;API及语句同jquery相似,但文件更小(可压缩至8KB)。是目前功能完备的库中,最小的一个。

           * zepto.js特点

               1、针对的是移动端

               2、轻量级,压缩版本只有8KB

               3、语法大部分同jquery一样,学习成本低,上手快。

               4、响应,执行快。

               5、同jquery一样以$作为核心函数和核心对象。

* attr与prop的区别:

   - jQuery中

       1、prop多用在标签的固有属性,布尔值属性。比如:a标签的href,class,selected等。

       2、attr多用在自定义属性上。

       3、在jquery中如果用attr去获取布尔值属性且该布尔值属性在标签体内没有定义的时候,会返回undefined

   - zepto中

   1,在zepto中用attr也可以获取布尔值属性.

    2,prop在读取属性的时候优先级高于attr,布尔值属性的读取还是建议用prop

    * 坑!------zepto中removeProp()的方法。在1.2以上才支持。

*DOM操作

 - jquery中插入DOM元素的时候添加配置对象(属性选择器:id,class。。。)的时候不会显示; 

- zepto 插入DOM元素的时候添加配置对象的时候可以添加进去,并且添加的配置对象的内容会直接反应在标签属性内,且可以操作,影响对应的DOM元素。

* each()方法

     在jQuery中 $.each(collection, function(index, item){ ... })

           -可以遍历数组,以index,item的形式,

           - 可以遍历对象,以key-value的形式

           -不可以遍历字符串。

           -不可以遍历json字符串   

·  在zepto中,$.each(collection, function(index,item){ ... })

           - 可以遍历数组,以index,tiem的形式,

           -可以遍历对象,以key-value的形式,

           -可以遍历字符串。

*offset 

    - 在jQuery中 

     -获取匹配元素在当前视口的相对偏移。

     - 返回的对象包含两个整型属性:top 和 left。此方法只对可见元素有效。获取width,height时为undefined。

    - 在zepto中

       1、获得当前元素相对于视口的位置。

       2、返回一个对象含有: top, left, width和height(获取的宽高是盒模型可见区域的宽高) 

* width和height的区别:

    - jquery获取宽高的方法

    1、width(),height()---content内容区的宽高,没有单位px;

    2、.css('width')----可以获取content内容区的宽高,padding,border的值,有单位px;

    3、innerHeight(),innerWidth()---outerHeight(),outerWidth()来获取

    4,可以通过css()获取padding,border的值

    -zepto

    1,zepto用width(),height()是根据盒模型决定的,并且不包含单位PX,包含padding的值,border的值

    2,zepto中没有

innerHeight(),innerWidth()---outerHeight(),outerWidth()

* jquery可以获取隐藏元素的宽高

* zepto无法获取隐藏元素宽高

 

* 事件委托

- 在jQuery中,前面是父元素,后面是绑定的元素。

$('#box').delegate('.a','click',function(){

              alert('delegate');

           })

-  在zepto中委托的事件先被依次放入数组队列里,然后由自身开始往后查找,期间符合条件的回调函数都会触发,符合条件的元素委托的事件都会执行。

          

               1、委托在同一个父元素身上

               2、委托的是同一个事件

               3、委托关联 操作与其关联的元素

这样,就会触发第一个事件后,后面的事件会自动的触发。

 

* 点击事件

在jQuery中:

- on() 绑定事件处理程序

- off() 方法移除用目标oon绑定的事件处理程序。

- bind() 为每个匹配元素的特定事件绑定事件处理函数,可同时绑定多个事件,也可以自定义事件。

- one() 为每一个匹配元素的特定事件(像click)绑定一个一次性的事件处理函数。只执行一次。

- unbind() bind的反向操作,删除匹配元素所绑定的bind事件。

- zepto方法

    - tap()点击事件利用在document上绑定touch事件来模拟tap事件的,并且tap事件会冒泡到document上

    - singleTap()  点击事件

    - doubleTap()  双击事件

    - longTap()    当一个元素被按住超过750ms触发。

    - swipe,swipeLeft, swipeRight, swipeUp, swipeDown — 当元素被划过(同一个方向滑动距离大于30px)时触发。(可选择给定的方向)

    * 在一个方向滑动大于30px即为滑动。否则算点击。

    *注意浏览器的默认行为(翻页)滑动的时候应该阻止对应的该默认行为

               $('#btn').on('touchmove',function (e) {

                   e.preventDefault();

                });

* form表单

1、serialize()

    在Ajax post请求中将用作提交的表单元素的值编译成 URL-encoded 字符串。---key(name)/value

    2、serializeArray()

    将用作提交的表单元素的值编译成拥有name和value对象组成的数组。

     不能使用的表单元素,buttons,未选中的radio buttons/checkboxs 将会被跳过。

    3、submit()

    为 "submit" 事件绑定一个处理函数,或者触发元素上的"submit" 事件。

       * 当参数function没有给出时,触发当前表单“submit”事件,并且执行默认的提交表单行为,除非阻止默认行为。

 

 

 

 

   

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值