jQuery的实现原理的模拟代码 -1 核心部分

JQuery实现DIV模拟的单选与多选下拉框 设计一个既美观又功能强大的下拉选择框是一个挑战,它需要将用户界面(UI)设计和用户体验(UX)结合起来,同时还需要考虑代码的实现逻辑。在本章节中,我们将深入探讨如何构建一个拥有自定义样式和交云的下拉选择框。在开发Web应用时,浏览器兼容性问题几乎是每个开发人员都会面临的一大挑战。不同的浏览器,如IE和Firefox,对于Web标准的实现不尽相同,这导致了多种兼容性问题的产生。常见的兼容性问题类型包括但不限于:DOM和JavaScript解析差异。 阅读详情
核心部分实现了两种选择器,使用 id 和标记名,还可以提供 css 的设置,以及 text 的设置。
复制代码 代码如下:

// # 表示在 jQuery 1.4.2 中对应的行数
// 定义变量 undefined 方便使用
var undefined = undefined;
// jQuery 是一个函数,其实调用 jQuery.fn.init 创建对象
var $ = jQuery = window.$ = window.jQuery // #19
= function (selector, context) {
return new jQuery.fn.init(selector, context);
};
// 用来检查是否是一个 id
idExpr = /^#([\w-]+)$/;
// 设置 jQuery 的原型对象, 用于所有 jQuery 对象共享
jQuery.fn = jQuery.prototype = { // #74
length: 0, // #190
jquery: "1.4.2", // # 187
// 这是一个示例,仅仅提供两种选择方式:id 和标记名
init: function (selector, context) { // #75
// Handle HTML strings
if (typeof selector === "string") {
// Are we dealing with HTML string or an ID?
match = idExpr.exec(selector);
// Verify a match, and that no context was specified for #id
if (match && match[1]) {
var elem = document.getElementById(match[1]);
if (elem) {
this.length = 1;
this[0] = elem;
}
}
else {
// 直接使用标记名
var nodes = document.getElementsByTagName(selector);
for (var l = nodes.length, j = 0; j < l; j++) {
this[j] = nodes[j];
}
this.length = nodes.length;
}
this.context = document;
this.selector = selector;
return this;
}
},
// 代表的 DOM 对象的个数
size: function () { // #193
return this.length;
},
// 用来设置 css 样式
css: function (name, value) { // #4564
this.each(
function (name, value) {
this.style[name] = value;
},
arguments // 实际的参数以数组的形式传递
);
return this;
},
// 用来设置文本内容
text: function (val) { // #3995
if (val) {
this.each(function () {
this.innerHTML = val;
},
arguments // 实际的参数以数组的形式传递
)
}
return this;
},
// 用来对所有的 DOM 对象进行操作
// callback 自定义的回调函数
// args 自定义的参数
each: function (callback, args) { // #244
return jQuery.each(this, callback, args);
}
}
// init 函数的原型也就是 jQuery 的原型
jQuery.fn.init.prototype = jQuery.prototype; // #303
// 用来遍历 jQuery 对象中包含的元素
jQuery.each = function (object, callback, args) { // #550
var i = 0, length = object.length;
// 没有提供参数
if (args === undefined) {
for (var value = object[0];
i < length && callback.call(value, i, value) !== false;
value = object[++i])
{ }
}
else {
for (; i < length; ) {
if (callback.apply(object[i++], args) === false) {
break;
}
}
}
}

在 jQuery 中, jQuery 对象实际上是一个仿数组的对象,代表通过选择器得到的所有 DOM 对象的集合,它像数组一样有 length 属性,表示代表的 DOM 对象的个数,还可以通过下标进行遍历。

95 行的 jQuery.each 是 jQuery 中用来遍历这个仿数组,对其中的每个元素进行遍历处理的基本方法,callback 表示处理这个 DOM 对象的函数。通常情况下,我们并不使用这个方法,而是使用 jQuery 对象的 each 方法进行遍历。jQuery 对象的 css 和 text 方法在内部实际上使用 jQuery 对象的 each 方法对所选择的元素进行处理。

这些函数及对象的关系见:jQuery 原型关系图


下面的脚本使用这个脚本库。
复制代码 代码如下:

// 原型操作
$("h1").text("Hello, world.").css("color", "green");
jQuery模拟实现淘宝移动端地址添加功能 htmltable {th, td {th {pre {简介:本项目使用jQuery库模拟淘宝移动端地址添加功能,实现省市区县街道四级联动选择,提供高效且用户友好的收货地址录入界面。项目涉及DOM操作、AJAX通信、JSON数据处理、CSS样式设计、事件处理等前端技术,并重视用户体验和浏览器兼容性。 阅读详情

相关推荐

camera——HAL层知识分享

CameraHAL层是Android相机系统的核心中间层,负责连接Framework层与硬件驱动层。它通过标准化接口解耦软硬件,实现跨平台兼容性,同时为厂商提供硬件定制空间。主要功能包括:设备管理、数据流处理、参数控制以及图像优化。关键子系统涵盖预览、拍照、录像、对焦与曝光等模块,采用HAL3的"请求-响应"模型实现精细控制。性能优化重点关注启动时间、帧率稳定性和延迟控制。通过分层架构设计(接口层-核心层-适配层)和缓冲池机制,确保高效数据传输和硬件资源调度。

2302_77429403的博客 2069

jQuery 原理模拟代码

JQuery 原理jQuery1.3.2 源码学习-5 jQuery 中的原型jQuery 的原型关系图jQuery 原理的模拟代码 -1 核心部分jQuery 原理的模拟代码 -2 数据部分jQuery 原理的模拟代码 -3 事件处理jQuery 原理的模拟代码 -4 重要的扩展函数 extendjQuery 原理的模拟代码 -5 Ajax jQuery 原理的模拟代码 -1 核心部分最近又看了一下 jQuery 1.4.2, 为了便于理解,将 jQuery 的核心使用比较简单的代码模拟一下。方便学习。核

expleeve 1887

基于MATLAB的基本数字调制解调系统的设计

基于MATLAB的基本数字调制解调系统的设计一、摘要现代通信系统要求通信距离远、通信容量大、传输质量好,作为其关键技术之一的调制解调技术一直是人们研究的一个重要方向。本文以MATLAB为软件平台,充分利用其提供的通信工具箱和信号处理工具箱中的模块,对数字调制解调系统进行Simulink设计仿真,并且进行误差分析。调制与解调是通信系统中十分重要的一个环节,针对不同的信道环境选择不同的调制与解调方式可...

m0_55395440的博客 5549

jQuery原理模拟代码

转载自:点击打开链接

Kevin的逆袭博客 1294

从UC3842的FB脚到COMP脚:一次讲透反激电源两种光耦反馈接法的选择与实战

本文深入探讨了UC3842 PWM控制器在反激式开关电源设计中的两种光耦反馈接法:FB脚与COMP脚方案。通过分析信号极性差异、稳定性特点及动态响应性能,提供场景化选型指南和可靠性设计要点,帮助工程师优化反馈环路设计,提升系统稳定性与效率。特别针对TL431和PC817等关键元件在温度漂移、老化衰减等实际问题给出解决方案。

weixin_28717683的博客 704

【图论】系列(七)图论的中心性度量方法及重要性评价指标

图论中的中心性度量方法是用来衡量图中各个节点(或顶点)相对重要性的指标。

qq_30066733的博客 1075

jQuery 原理的模拟代码 -1 核心部分

最近又看了一下 jQuery 1.4.2, 为了便于理解,将 jQuery 的核心使用比较简单的代码模拟一下。方便学习。 核心部分实现了两种选择器,使用 id 和标记名,还可以提供 css 的设置,以及 text 的设置。 1//#表示在jQuery1.4.2中对应的行数23//定义变量undefined方便使用4varundefined=unde...

ziqi688的博客 62

微信小程序 - 最新详细实现用户保存下载视频到手机相册,将视频临时路径、在线播放地址(网络路径)URL存储到手机,弹出访问手机相册权限询问,支持视频格式mp4、avi、mov、wmv、flv、webm

微信小程序,视频,手机相册,保存,另存为,小程序保存到相册权限,writePhotosAlbum,一键保存视频到手机相册功能(视频来源为链接),第一次要获取用户授权,授权使用相册权限,小程序视频下载,如何把视频下载到相册,下载一个视频到本地相册,显示下载进度,可取消下载,视频下载到本地,微信小程序视频如何下载,保存视频到相机,页面播放视频并下载到本地,安卓系统,苹果ios保存到相册报错,权限拒绝后打不开,添加相册授权弹框拒绝后再也出不来了,实现保存视频到手机相册功能,将mp4在线视频下载并存储到用户的手机中

🏆 前端领域优质创作者 7620

jQuery核心部分原理的模拟代码

51CTO之前报道过《jQuery 1.4十大新特性解读及代码示例》,为了便于理解,将jQuery的核心使用比较简单的代码模拟一下。核心部分实现了两种选择器,使用id和标记名,还可以提供CSS的设置,以及tex的设置。 51CTO推荐阅读:jQuery四大天王:核心函数详解 //#表示在 jQuery 1.4.2 中对应的行数     // 定义变量 undefined 方便使用  ...

202

openbmc 支持mctp over pcie(三)(支持作为endpoint)

本文介绍了在Intel BHS平台上支持MCTP over PCIe端点开发的调试方法。开发基于CodeConstruct和AspeedTech-BMC的开源项目,将内核驱动改为模块形式以便调试。内容包括DTS配置、驱动模块设置步骤,以及如何将BMC配置为端点设备。调试过程涉及内核模块加载、MCTPD启动、参数设置等关键命令,并展示了路由表、地址和邻居信息的测试结果。该方案仅为实验性工作,需注意停止其他使用/dev/aspeed-mctp0接口的应用。

wit_yuan的专栏 1553

人工智能智能体研究综述:从理论架构到前沿应用

AI Agent,即人工智能智能体,是指能够在特定环境中自主感知、推理、决策并执行行动以实现特定目标的智能系统[1]。自主性反应性主动性(Pro-activeness)和社会性fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;AI Agent核心特征自主性 Autonomy反应性 Reactivity主动性 Pro-activeness。

nmdbbzcl的博客 902

ATBroker.exe 滥用指南:利用 Windows 辅助技术机制实现代码执行(LOLBAS 项目深度解析)

ATBroker.exe 是 Windows 自带的辅助技术(Assistive Technology, AT)启动辅助进程,但攻击者可以滥用其 `/start` 参数,配合注册表注册的恶意 AT 条目实现代码执行,因此被收录进 LOLBAS(Living Off The Land Binaries And Scripts)项目。本文以 [Archive-Old-Version/OSBinarie

gitblog_00162的博客 616

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

jQuery 原理的模拟代码 -0 目录

为了方便查阅,将最近的 jQuery 原理模拟代码整理一个目录。 JQuery 原理 jQuery1.3.2 源码学习-5 jQuery 中的原型 jQuery 的原型关系图 jQuery 原理的模拟代码 -1 核心部分 jQuery 原理的模拟代码 -2 数据部分 jQuery 原理的模拟代码 -3 事件处理 jQuery 原理的模...

weixin_30840573的博客 84

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

JQuery原理介绍及学习方法

前言对于JQuery,想必大家都很熟悉。目前,很多web项目,在实施的过程中,考虑到各浏览器原生JS API的兼容性,大都会选用JQuery或类似于JQuery这样的框架来进行网页效果开发。JQuery上手简单,也很容易学,即使是刚接触JQuery的开发人员,借助JQuery手册,也很快能在项目中使用开发。虽然JQuery相对简单,但要全面掌握,且快速灵活的使用它也并不那么轻松...

XTU_xiaoxin的专栏 2257

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

模拟jquery原理

;(function() { function JQuery(selector) { return new JQuery.prototype.init(selector) } JQuery.prototype.init = function(selector) { let dom = {} if (selector.indexOf('....

cmchenmei的博客 231

jQuery 原理的模拟代码 -6 代码下载

前几篇文章中的示例代码,去掉了几个 bug, 这里一起提供下载。 jQuery 核心模拟的代码 jQuery 数据管理的代码 jQuery 事件处理的代码 jQuery ajax 模拟代码 jQuery extend 的代码 测试页面: 1<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://ww...

ziqi688的博客 65

解密jQuery事件核心 - 模拟事件(四)

前几章已经把最核心的实现都分解过了,这一章我们看看jQuery是如何实现事件模拟的 在Internet Explorer 8和更低,一些事件change 和 submit本身不冒泡,但jQuery修改这些冒泡,创建一致的跨浏览器的行为。 焦点事件 blur : 在这个事件触发前,元素已经失去焦点,不冒泡,同步触发。target 指向当前失去焦点的元素。 focus

vuturn的专栏 656

简单模拟jquery的ajax封装

简单模拟jquery的ajax封装 function ajax(option) { var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP") requestUrl = option.url requestMet...

qq_36497590的博客 218

Threejs-Awesome-Graphics-Agent-Skills运行模型全解:确定性种子、无后期基线与机制化质量层级

如果你在用 AI Agent 写 three.js 场景,最头疼的往往是"画面不稳定、参数说不清、质量靠玄学"。Threejs-Awesome-Graphics-Agent-Skills 是一套面向 Codex、Claude Code、Cursor 等 Agent 的 three.js 图形技能包(agent skills pack),它把"好画面"拆成了可检查的运行机制:**确定性种子、无后期基

gitblog_00670的博客 416

从 jQuery 到 PHP:模拟前端思想的后端实现

虽然 PHP 和 jQuery 应用于不同的技术领域,但优秀的设计思想是相通的。通过模拟 jQuery 的 API 风格,我们可以在 PHP 中实现更简洁、更易读、更易扩展的代码。需要多步骤处理数据的业务逻辑动态生成结构化内容(如 HTML、XML)构建灵活的插件或扩展系统当然,我们也要注意避免过度设计。在简单场景下,直接的函数调用可能比复杂的类结构更高效。关键是理解这些设计背后的思想,根据实际需求选择合适的实现方式。

zuichu520的博客 657

jQuery hashchange插件核心原理:跨浏览器hashchange事件实现详解

jQuery hashchange插件是一个轻量级工具,它为不支持HTML5原生`window.onhashchange`事件的浏览器提供了跨浏览器解决方案,实现了基于URL哈希(#hash)的书签和历史记录功能。通过这个插件,开发者可以轻松监听URL哈希变化,实现单页应用的无刷新导航体验。 ## 核心功能:解决跨浏览器兼容性问题 该插件的核心价值在于抹平不同浏览器对`hashchange`事

gitblog_00530的博客 616
上一篇: 闲着看看jquery.ajax源码
下一篇: jQuery的实现原理的模拟代码 -2 数据部分
最后一个菜鸟
博客等级 码龄16年 17粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值