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
老马微信:请扫码
06-老马jQuery教程-jQuery高级的更多相关文章
- jquery教程-Jquery 获取标签个数 size()函数用法
jquery教程-Jquery 获取标签个数 size()函数用法,size() 方法返回被 jQuery 选择器匹配的元素的数量. 语法 $(selector).size() jQuery ...
- 02-老马jQuery教程-jQuery事件处理
1. 绑定简单事件 在DOM中DOM0级绑定事件的方式是直接给事件属性赋值,但是这样有个缺点就是每次指定的事件处理程序会把之前的覆盖掉. jQuery简单绑定事件的方式,可以让我绑定多个事件处理程序跟 ...
- 01-老马jQuery教程-jQuery入口函数及选择器
前言 这套jQuery教程是老马专门为寒门子弟而录制,希望大家看到后能转发给更多的寒门子弟.视频都是免费,请参考课程地址:https://chuanke.baidu.com/s5508922.html ...
- 05-老马jQuery教程-动画
前言 jQuery的动画系统做的非常出色,而且把最常用的显示.隐藏.淡入淡出.滑动显示和折叠凳效果都做了很好的封装.跟jQuery的选择器和事件配合起来,可以实现很多很绚的效果,而且简单易用兼容性好. ...
- 04-老马jQuery教程-DOM节点操作及位置和大小
1. jQuery创建DOM标签 1.1 DOM动态创建标签的方法 DOM时代我们通过document的createElement方法动态创建标签.创建标签后,动态的给他添加属性.例如代码: // 动 ...
- 03-老马jQuery教程-DOM操作
jQuery DOM操作 在没有jQuery之前,DOM的操作相对来说有点麻烦,尤其是DOM节点的搜索.目前我们已经学习了jQuery的选择器,接下带大家一块学习jQuery的DOM操作,jQuery ...
- [转载]javascript+ajax+jquery教程11--正则表达式
原文地址:javascript+ajax+jquery教程11--正则表达式作者:morflame 正则表达式可以: 测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个 ...
- jQuery 教程
jQuery 教程 W3School H-ui前端框架 html标签
- Web 开发人员不能错过的 jQuery 教程和案例
jQuery 把惊喜延续到设计领域,处处带来极大的灵活性,创造了许多体验良好的设计,而且拥有不错的性能.这里分享一组 Web 开发人员不能错过的 jQuery 教程和案例,帮助你更好的掌握 jQuer ...
随机推荐
- POJ 2676 Sudoku (DFS)
Sudoku Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 11694 Accepted: 5812 Special ...
- HDU 2227 Find the nondecreasing subsequences (数状数组)
Find the nondecreasing subsequences Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/3 ...
- dll版本兼容
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <depen ...
- 如何禁用Visual Studio 2013的浏览器链接功能
VS2013新增的Browser Link功能虽然“强大”,但我并不需要. 但默认是开启的,会在页面中自动添加如下的代码,真是烦人! <!-- Visual Studio Browser Lin ...
- 【ASP.NET】@RenderBody,@RenderPage,@RenderSection的使用
@RenderBody @RenderBody是布局页(_Layout.cshtml)通过占位符@RenderBody占用独立部分,当创建基于此布局页的试图时,视图的内容会和布局页合并,而新创建的视图 ...
- python学习笔记——提取网页信息BeautifulSoup4
1 BeautifulSoup概述 beautifulSoup是勇python语言编写的一个HTML/XML的解析器,它可以很好地处理不规范标记并将其生成剖析树(parse tree): 它提供简单而 ...
- React icon bak
- The password supplied with the username Domain\UserName was not correct. Verify that it was entered correctly and try again
起因 今天想进入SharePoint 2013 Central Administration创建一个WebApplication,尽然发生了错误: The password supplied with ...
- htmlentities、addslashes 、htmlspecialchars的使用
1.html_entity_decode():把html实体转换为字符. Eg:$str = "just atest & 'learn to use '";echo htm ...
- echarts 与 百度地图bmap结合系列: 如何设置地图缩放级别和监听缩放事件
简单的demo: // ehcarts 的实例对象 this.myChart = echarts.init(el) // ehcarts加载完成事件 this.myChart.on('finished ...