jQuery学习使用和源码解读

本文详细介绍了jQuery的使用方法、源码解析及方法应用等内容,适合前端开发者深入学习。

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

最近更新时间:2018年5月22日10:32:39

我的博客地图

    最近思想沦陷,成为抖音重度用户,自娱自乐,悠哉乐哉。对于前端同学而言,JavaScript函数库jQuery并不陌生,但有多少人能达到熟知和精通?可能大部分人知而不精,因为我目前就是这个层次,因此,花费大量时间来重新学习。本文主要讨论以下几个方面的问题,关键字:使用,版本,源码,函数。

1、使用

a.静态文件

    常规使用方法,在项目中使用静态文件,点击进入官网下载页面(右键另存为即可下载),分为:compressed(压缩版)和uncompressed(非压缩版),还有一个map文件,关于JavaScript Source Map相关知识点,请参考阮一峰老师的这篇文章《JavaScript Source Map 详解》

上述三个文件对应的文件名如下:

jquery-3.3.1.min.js

jquery-3.3.1.js

jquery-3.3.1.min.map

b.外部引用

    CDN使用方法,使用script标签引入

查看jQuery官方CDN,请点击这里

jQuery官方CDN:<script src="https://code.jquery.com/jquery-3.3.1.min.js">

查看CDN官方CDN,请点击这里

CDN官方CDN:<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js">

菜鸟教程的CDN:<script src="http://cdn.static.runoob.com/libs/jquery/1.10.2/jquery.min.js">

c.安装包

    项目带有包管理工具可以使用npm或yarn

npm install jquery

yarn add jquery

2、源码

    本次解读源码版本为3.3.1,总行数:10365,以下源代码由浅入深:

a.level 1

    最简化的jQuery源码,一个匿名自执行函数。

(function(global,factory){
	factory( global );
})(a,b);

b.level 2

    自执行函数传入了两个实参,一个window对象,一个返回jQuery对象的函数。此时,清晰可见自执行函数对外暴露了jQuery对象。

(function(global,factory){
	factory( global );
})(window,function(window){
	window.jQuery = window.$ = jQuery;// 挂载全局变量
	return jQuery;
});

c.level 3

    丰富了函数体,加入严格模式,模块化方案,window对象判断。

(function(global,factory){
	"use strict";
	if(typeof module === "object" && typeof module.exports === "object"){
		module.exports = factory( global, true );//CMD 模块化方案
	}else{
		factory( global );
	}
})(typeof window !== 'undefined' ? window : this,function(window,noGlobal){
	"use strict";
	window.jQuery = window.$ = jQuery;
	return jQuery;
});

b.level 4

    加入了document对象判断,加入了jQuery定义。

(function(global,factory){
	"use strict";
	if(typeof module === "object" && typeof module.exports === "object"){
		module.exports = global.document ?
			factory( global, true ) :
			function( w ) {
				if ( !w.document ) {
					throw new Error( "jQuery requires a window with a document" );
				}
				return factory( w );
			};
	}else{
		factory( global );
	}
})(typeof window !== 'undefined' ? window : this,function(window,noGlobal){
	"use strict";
	var version = "3.3.1",
		jQuery = function( selector, context ) {
			return new jQuery.fn.init( selector, context );
		};
	window.jQuery = window.$ = jQuery;
	return jQuery;
});

3、源码片段解析

待续...

4、方法使用——工具类

jQuery.extend();

将两个或更多对象的内容合并到第一个对象,示例:

var object = $.extend({}, object1, object2);

var object = $.extend( true,object1, object2);//递归合并,深拷贝

var object = $.extend( object1, object2);//非递归合并,直接相同的key覆盖

如果只有一个参数提供给$.extend(),这意味着目标参数被省略。在这种情况下,jQuery对象本身被默认为目标对象。这样,我们可以在jQuery的命名空间下添加新的功能。这对于插件开发者希望向 jQuery 中添加新函数时是很有用的。

var object = $.extend({checkAllDiv:function(){}});//此时目标对象默认是jQuery对象


jQuery.fn.extend();//一个对象的内容合并到jQuery的原型,以提供新的jQuery实例方法。

5、为元素绑定事件处理程序

jQuery 1.4之前的版本,.live()附加一个事件处理器到匹配目前选择器的所有元素,现在和未来。version deprecated: 1.7, removed: 1.9

jQuery 1.4之前的版本,.bind()方法用于直接附加一个事件处理程序到存在的元素上。缺点,这些元素必须已经存在。

从jQuery 1.7开始,.on() 方法是将事件处理程序绑定到文档(document)的首选方法,在选定的元素上绑定一个或多个事件处理函数。


.click(function(){})是.on('click',function(){})的快捷方式

.click()是.trigger('click')的快捷方式,触发某元素绑定的click事件


从jQuery 1.7开始,.delegate()已经被.on()方法取代。


解除绑定

.unbind()

.off()移除一个事件处理函数。


事件类型:

blur, focus, focusin, focusout, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error。


$("div.test").bind({click: function(){},mouseenter: function(){},mouseleave: function(){}});

$("div.test").on({click: function(){},mouseenter: function(){},mouseleave: function(){}});

6、DOM操作

.append() 在每个匹配元素里面的末尾处插入参数内容。

.appendTo() 将匹配的元素插入到目标元素的最后面(译者注:内部插入)

.before() 根据参数设定,在匹配元素的前面插入内容(译者注:外部插入)

.clone()创建一个匹配的元素集合的深度拷贝副本,注意避免元素id重名

7、DOM属性

.attr() 获取匹配的元素集合中的第一个元素的属性的值。设置每一个匹配元素的一个或多个属性。

$("img").attr("src");

$('#photo').attr('alt', 'Beijing Brush Seller');

$('#photo').attr({alt: 'Beijing Brush Seller',title: 'photo by Kelly Clark'});

8、遍历

.children()获得匹配元素集合中每个元素的子元素,选择器选择性筛选。

.find() 通过一个选择器,jQuery对象,或元素过滤,得到当前匹配的元素集合中每个元素的后代

9、文档加载

以下两个方法等价,都是指DOM结构已完全加载,执行的脚本,但此时图片不一定load

$(document).ready(function() {// Handler for .ready() called.});

$(function() {// Handler for .ready() called.});


动态获取图片信息,需要用.load(),.load()事件适用于任何可使用 URL关联的任何元素:images, scripts, frames, iframes,  window 对象。

$('#myimg').load(function(){

  if($(this).height() > 100) {

    $(this).addClass('bigImg');

  }

});


当页面(包括所有图片)被完全加载完后,执行一个函数。

$(window).load(function () {

  // run code
});
内容概要:该论文聚焦于T2WI核磁共振图像超分辨率问题,提出了一种利用T1WI模态作为辅助信息的跨模态解决方案。其主要贡献包括:提出基于高频信息约束的网络框架,通过主干特征提取分支高频结构先验建模分支结合Transformer模块注意力机制有效重建高频细节;设计渐进式特征匹配融合框架,采用多阶段相似特征匹配算法提高匹配鲁棒性;引入模型量化技术降低推理资源需求。实验结果表明,该方法不仅提高了超分辨率性能,还保持了图像质量。 适合人群:从事医学图像处理、计算机视觉领域的研究人员工程师,尤其是对核磁共振图像超分辨率感兴趣的学者技术开发者。 使用场景及目标:①适用于需要提升T2WI核磁共振图像分辨率的应用场景;②目标是通过跨模态信息融合提高图像质量,解决传统单模态方法难以克服的高频细节丢失问题;③为临床诊断提供更高质量的影像资料,帮助医生更准确地识别病灶。 其他说明:论文不仅提供了详细的网络架构设计与实现代码,还深入探讨了跨模态噪声的本质、高频信息约束的实现方式以及渐进式特征匹配的具体过程。此外,作者还对模型进行了量化处理,使得该方法可以在资源受限环境下高效运行。阅读时应重点关注论文中提到的技术创新点及其背后的原理,理解如何通过跨模态信息融合提升图像重建效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值