06-老马jQuery教程-jQuery高级

1.jQuery原型对象解密

jQuery里面的大部分API都是在jQuery的原型对象上定义的。jQuery源码中对原型对象做了简写的处理。也就是说:jQuery.fn === jQuery.prototype,参考jQuery源码:

...
jQuery.fn = jQuery.prototype = {

// The current version of jQuery being used
jquery: version,

constructor: jQuery,

// The default length of a jQuery object is 0
length: 0,

toArray: function() {
  return slice.call( this );
},
...

1.1 each函数

jQuery的包装对象封装了each(callback)方法,以每一个匹配的元素作为上下文来执行一个函数。
意味着,每次执行传递进来的函数时,函数中的this关键字都指向一个不同的DOM元素(每次都是一个不同的匹配元素)。而且,在每次执行函数时,都会给函数传递一个表示作为执行环境的元素在匹配的元素集合中所处位置的数字值作为参数(从零开始的整型)。 返回 'false' 将停止循环 (就像在普通的循环中使用 'break')。返回 'true' 跳至下一个循环(就像在普通的循环中使用'continue')。

实例:

// 迭代两个图像,并设置它们的 src 属性。注意:此处 this 指代的是 DOM 对象而非 jQuery 对象。
// HTML 代码:
// <img/><img/>
$("img").each(function(i){
  this.src = "test" + i + ".jpg";
  // this 指向当前的变量的dom对象。 i是当前dom对象在选择器返回数组中的索引。
 });

1.2 获取元素的个数

两种方法可以获取选择器匹配的元素的个数。

第一种方法:$('p').size();
第二种方法:$('p').length

以上两种方法都可以。推荐使用length属性

1.3 其他属性和方法

属性/方法名 用法 介绍
selector $('p').selector 返回选择器的字符串
get() $('p').get(); 返回所有的选择的dom对象的集合
get(index) $('p').get(1); 返回第2个dom对象,索引从0开始
toArray() $('p').toArray(); 把jQuery集合中所有DOM元素恢复成一个数组。

�2.jQuery构造函数解密

2.1 构造函数的each方法

  • 语法:jQuery.each(object, [callback])
  • 概述

    通用例遍方法,可用于例遍对象和数组。不同于例遍 jQuery 对象的 $().each() 方法,此方法可用于例遍任何对象。回调函数拥有两个参数:第一个为对象的成员或数组的索引,第二个为对应变量或内容。如果需要退出 each 循环可使回调函数返回 false,其它返回值将被忽略。

  • 参数
    • object:需要例遍的对象或数组。
    • callback:每个成员/元素执行的回调函数。
  • 示例
    // 例遍数组,同时使用元素索引和内容。
    $.each( [0,1,2], function(i, n){
      alert( "Item #" + i + ": " + n );
    });
    // 例遍对象,同时使用成员名称和变量内容。
    $.each( { name: "John", lang: "JS" }, function(i, n){
      alert( "Name: " + i + ", Value: " + n );
    });
    

2.2 构造函数的map方法

  • 语法 :jQuery.map(arr|obj,callback)
  • 返回值: Array新数组
  • 概述

    将一个数组中的元素转换到另一个数组中。作为参数的转换函数会为每个数组元素调用,而且会给这个转换函数传递一个表示被转换的元素作为参数。转换函数可以返回转换后的值、null(删除数组中的项目)或一个包含值的数组,并扩展至原始数组中。

  • 参数
    • array:待转换数组。
    • callback:为每个数组元素调用,而且会给这个转换函数传递一个表示被转换的元素作为参数。函数可返回任何值。
  • 示例
    // 将原数组中每个元素加 4 转换为一个新数组。
    $.map( [0,1,2], function(n){
      return n + 4;
    });
    // 结果:
    // [4, 5, 6]
    
    // 原数组中大于 0 的元素加 1 ,否则删除。
    $.map( [0,1,2], function(n){
      return n > 0 ? n + 1 : null;
    });
    // 结果:
    // [2, 3]
    
    // 原数组中每个元素扩展为一个包含其本身和其值加 1 的数组,并转换为一个新数组。
    $.map( [0,1,2], function(n){
      return [ n, n + 1 ];
    });
    // 结果:
    // [0, 1, 1, 2, 2, 3]
    

2.3 数组的过滤方法grep

  • 语法 jQuery.grep(array, callback, [invert])
  • 概述

    使用过滤函数过滤数组元素。此函数至少传递两个参数:待过滤数组和过滤函数。过滤函数必须返回 true 以保留元素或 false 以删除元素。

  • 参数
    • array:待过滤数组。
    • callback:此函数将处理数组每个元素。第一个参数为当前元素,第二个参数而元素索引值。
    • invert:如果 "invert" 为 false 或为设置,则函数返回数组中由过滤函数返回 true 的元素,当"invert" 为 true,则返回过滤函数中返回 false 的元素集。
  • 返回值: 数组Array
  • 示例
    // 过滤数组中小于 0 的元素。
    $.grep( [0,1,2], function(n,i){
      return n > 0;
    });
    // 结果:
    // [1, 2]
    
    // 排除数组中大于 0 的元素,使用第三个参数进行排除。
    $.grep( [0,1,2], function(n,i){
      return n > 0;
    }, true);
    // 结果:
    // [0]
    

2.4 转换数组方法jQuery.makeArray

  • 语法:jQuery.makeArray(obj)
  • 概述

    将类数组对象转换为数组对象。类数组对象有 length 属性,其成员索引为 0 至 length - 1。实际中此函数在 jQuery 中将自动使用而无需特意转换。

  • 参数: obj:类型Object,类数组对象。
  • 示例
    // 过滤数组中小于 0 的元素。
    // <div>First</div><div>Second</div><div>Third</div><div>Fourth</div>
    
    var arr = jQuery.makeArray(document.getElementsByTagName("div"));
    arr.reverse(); // 使用数组翻转函数
    // 结果:
    // Fourth
    // Third
    // Second
    // First
    

2.5 数组包含校验inArray

  • 语法:jQuery.inArray(value,array,[fromIndex])
  • 概述

    确定第一个参数在数组中的位置,从0开始计数(如果没有找到则返回 -1 )。

  • 参数
    • value:用于在数组中查找是否存在
    • array:待处理数组。
  • fromIndex:用来搜索数组队列,默认值为0。
  • 示例
    // 查看对应元素的位置
    var arr = [ 4, "Pete", 8, "John" ];
    jQuery.inArray("John", arr);  //3
    jQuery.inArray(4, arr);  //0
    jQuery.inArray("David", arr);  //-1
    jQuery.inArray("Pete", arr, 2);  //-1
    

2.6 合并数组方法merge

  • 语法:jQuery.merge(first,second)
  • 概述

    合并两个数组返回的结果会修改第一个数组的内容——第一个数组的元素后面跟着第二个数组的元素。要去除重复项,请使用$.unique()

  • 参数
    • first:第一个待处理数组,会改变其中的元素。
    • second:第二个待处理数组,不会改变其中的元素。
  • 示例
    // 合并两个数组到第一个数组上。
    $.merge( [0,1,2], [2,3,4] )
    // 结果:
    // [0,1,2,2,3,4]
    

2.7 数组去重unique

  • 语法:jQuery.unique(array)
  • 概述

    删除数组中重复元素。只处理删除DOM元素数组,而不能处理字符串或者数字数组。

  • 示例
    // 删除重复 div 标签。
    $.unique(document.getElementsByTagName("div"));
    // 结果:
    // [<div>, <div>, ...]
    

2.8 jQuery构造函数的扩展对象方法(继承)

  • 语法:jQuery.extend([deep], target, object1, [objectN])
  • 概述

    用一个或多个其他对象来扩展一个对象,返回被扩展的对象。如果不指定target,则给jQuery命名空间本身进行扩展。这有助于插件作者为jQuery增加新方法。 如果第一个参数设置为true,则jQuery返回一个深层次的副本,递归地复制找到的任何对象。否则的话,副本会与原对象共享结构。 未定义的属性将不会被复制,然而从对象的原型继承的属性将会被复制。

  • 参数
    • target:一个对象,如果附加的对象被传递给这个方法将那么它将接收新的属性,如果它是唯一的参数将扩展jQuery的命名空间。
    • object1:待合并到第一个对象的对象。
    • objectN:待合并到第一个对象的对象。
    • deep:如果设为true,则递归合并。
  • 示例
    // 合并 settings 和 options,修改并返回 settings。
    var settings = { validate: false, limit: 5, name: "foo" };
    var options = { validate: true, name: "bar" };
    jQuery.extend(settings, options);
    // 结果:
    // settings == { validate: true, limit: 5, name: "bar" }
    

2.9 其他构造函数上的方法和属性

属性名 实例 说明
noop var f = jQuery.noop; 一个空函数
isArray $.isArray([1,3,4]) 测试对象是否为数组。
isFunction jQuery.isFunction(obj) 测试对象是否为函数。
isNumeric jQuery.isNumeric(value) 确定它的参数是否是一个数字。
isWindow jQuery.isWindow(obj) 测试对象是否是窗口
error jQuery.error(message) 接受一个字符串,并且直接抛出一个包含这个字符串的异常
trim jQuery.trim(str) 去掉字符串起始和结尾的空格

3.链式编程和隐式迭代

3.1 链式编程

由于大部分jQuery的api方法内部返回值都是jQuery的包装对象自身。所以我们可以在jQuery的api调用之后继续调用jQuery的方法,这样就称作是链式编程。

例如代码:

$('#p1').css('color', 'red').height(200).hide('slow');
// 等价于
$('#p1').css('color', 'red');
$('#p1').height(200);
$('#p1').hide('slow');

由于css方法、height、hide方法都返回jQuery包装对象自身。所以就可以继续链式调用。

有些方法可以破坏链式的结构,比如:
nextAll(),prevAll(),sibilings(),find(),children(),parent(),parents()...

如果想回到最近一次破坏链式结构之前的代码可以使用end方法。

$('#p1').nextAll().hide().end().css('color', 'red');

3.2 隐式迭代

jQuery包装对象本身就是一个伪数组,匹配的元素有多个的时候,要做设置操作的时候,jQuery内部会隐式的变量所有的匹配元素调用设置操作,所以称为隐式迭代。

4.jQuery的插件封装

4.1 给jQuery包装对象扩展方法属性

  • 直接给$.fn添加方法和属性
(function(jQuery) {
  jQuery.fn.logText = function() {
    console.log(this.text());
  };
})(jQuery);

4.2 给构造函数扩展方法和属性

  • 通过$.extend()来扩展jQuery构造函数
$.extend({
    log: function(message) {
        var now = new Date(),
            y = now.getFullYear(),
            m = now.getMonth() + 1, //!JavaScript中月分是从0开始的
            d = now.getDate(),
            h = now.getHours(),
            min = now.getMinutes(),
            s = now.getSeconds(),
            time = y + '/' + m + '/' + d + ' ' + h + ':' + min + ':' + s;
        console.log(time + ' My App: ' + message);
    }
});

$.log('initializing...'); //调用
  • 直接给jQuery构造函数添加属性和方法
(function(jQuery) {
  jQuery.appName = 'laoma Extend';
})(jQuery);

5.jQuery常用插件

  • jQuery UI
  • jQuery EasyUI
  • jQuery formvalidate
  • jQuery 延迟加载插件

.....



对应视频地址:https://chuanke.baidu.com/s5508922.html
老马qq: 515154084
老马微信:请扫码

 

微信:Flydragon_malun 或者18911865673

时间: 2024-09-21 05:35:19

06-老马jQuery教程-jQuery高级的相关文章

02-老马jQuery教程-jQuery事件处理

1. 绑定简单事件 在DOM中DOM0级绑定事件的方式是直接给事件属性赋值,但是这样有个缺点就是每次指定的事件处理程序会把之前的覆盖掉. jQuery简单绑定事件的方式,可以让我绑定多个事件处理程序跟DOM2级绑定事件的方式一样. 如果需要了解DOM的教程参考地址:https://chuanke.baidu.com/v5508922-239160-1771112.html 1.1 简单绑定click事件 语法格式:click([[data],fn]) 参数: data 可以省略,给可传入到函数f

01-老马jQuery教程-jQuery入口函数及选择器

前言 这套jQuery教程是老马专门为寒门子弟而录制,希望大家看到后能转发给更多的寒门子弟.视频都是免费,请参考课程地址:https://chuanke.baidu.com/s5508922.html 1.什么是jQuery? 1.1 jQuery介绍 jQuery是一个轻型.快速的.小巧的功能丰富的JavaScript类库.本质就是一堆js的函数的组合.对原生DOM操作做了一些非常有用的封装,可以让开发人员更简单.更方便.更统一的对DOM进行操作,比如:封装了事件相关统一操作api.DOM操作

jQuery教程:jQuery.noConflict控制冲突

文章简介:谈谈 jQuery 中的防冲突(noConflict)机制. 许多的 JS 框架类库都选择使用 $ 符号作为函数或变量名,jQuery 是其中最为典型的一个.在 jQuery 中,$ 符号只是 window.jQuery 对象的一个引用,因此即使 $ 被删除,window.jQuery 依然是保证整个类库完整性的坚强后盾.jQuery 的 API 设计充分考虑了多框架之间的引用冲突,我们可以使用 jQuery.noConflict 方法来轻松实现控制权的移交. jQuery.noCon

Jquery教程:JQUERY对于元素尺寸及位置定义

文章简介:最近小剧在学习JQUERY的一些应用,接触到了JQUERY对于元素尺寸及位置定义,还有就是配合浏览器尺寸及状态的计算所做出的一些动画特效.其实像这类JQUERY应用无外乎涉及这些属性的调用:innerHeight().innerWidth().outerHeight().outerHeight(true).outerHeight(fal 最近小剧在学习JQUERY的一些应用,接触到了JQUERY对于元素尺寸及位置定义,还有就是配合浏览器尺寸及状态的计算所做出的一些动画特效.其实像这类J

Webjx分享非常棒的国外的jQuery教程

文章简介:分享33个优秀的 jQuery 教程. jQuery 是一个非常优秀的 JavaScript 框架,使用简单灵活,在现在的Web开发项目中扮演着重要角色.这篇文章与大家分享33个优秀的 jQuery 教程,教您如何使用 jQuery 制作幻灯片.动画菜单.照片墙.图片画廊等很多效果很炫的功能. How To Build a Sliding Feature Slideshow with jQuery Fullscreen Gallery with Thumbnail Flip Movin

04-老马jQuery教程-DOM节点操作及位置和大小

1. jQuery创建DOM标签 1.1 DOM动态创建标签的方法 DOM时代我们通过document的createElement方法动态创建标签.创建标签后,动态的给他添加属性.例如代码: // 动态创建标签 var domDiv = document.createElment('div'); // 动态创建属性 domDiv.setAttribute('id', 'box'); // 动态设置内部html标签 domDiv.innerHTML = '<span>动态span</spa

03-老马jQuery教程-DOM操作

jQuery DOM操作 在没有jQuery之前,DOM的操作相对来说有点麻烦,尤其是DOM节点的搜索.目前我们已经学习了jQuery的选择器,接下带大家一块学习jQuery的DOM操作,jQuery对DOM操作的封装让我们前端开发工作非常简便.简洁.兼容性好.比如:属性操作统一化:直接attr方法既可以设置属性也可以读取属性. 1.jQuery操作DOM的属性 1.1 读取属性值 在DOM时代,我们可以通过DOM.getAttribute('attNamn')获取DOM的属性节点.可以通过DO

JQuery知识:20个jQuery教程+11个jQuery插件

在网络发展领域,由于 jQuery 简单易学,易于使用和易于扩展的特点,因此正慢慢变得无处不在.以下是从一些 jQuery 相关文章中整理出来的 30+ 新鲜与惊奇的 jQuery 插件与教程.如果你正在寻找最新的 jQuery 信息,这些内容值得一读. 教程 1. How to add preloader with loading image in a gallery using jQuery在图像画廊载入过程中使用 jQuery 预加载技术.演示 教程 2. Simple Lava Lamp

jQuery教程:整理的几个常见的初学者问题

    大家可能看到了,我已经将过去写的两篇jQuery的教程删掉了,因为附件不存在了等等问题,所以删除了,从今天开始我就写jQuery教程第二版了!希望大家能够支持我!本节并没有涉及到jQuery如何编写,只为大家解决几个常见问题,因为这也是面试中常常遇到的几个问题.如果你掌握了jQuery可以成为提升工资的一个资本. 初学jQuery的朋友,基本上都会问同一个问题"什么是jQuery?"等类似的问题,理解这个问题对于后面的学习会起到促进作用.以下是我整理出的大家常问的几个问题: 1