为什么可以像数组一样查询 jQuery('div') ?

2023-11-23

我还有一个关于 jQuery 架构的问题。$('div')构造一个新的jQuery object:

$('div') instanceof jQuery; // true

我想知道为什么可以像数组一样查询它,尽管它不是数组?

$('div')[0]; // returns the first div in the document as a DOM node.
$.isArray($('div')); // false

我就是喜欢这个语法,它看起来很干净!我还注意到这将 DOM 节点作为数组返回:

console.log($('div'));

有人可以解释一下如何将这种行为应用到我自己的对象上吗?


我自己的方法是使用如下方法创建一个数组:

var a = ['a', 'b', 'c'];
a.method = function(){ return 'test'; };
a; // ['a', 'b', 'c']
a[0]; // 'a'
a.method(); // 'test'

然而这似乎不是 jQuery 的做法,因为这实际上是一个数组:

$.isArray(a); // true

我想知道 jQuery 如何做到这一点,以学习并看看它是否是比我更好的解决方案。


jQuery 对象就是我们所说的Array-like object。这意味着,它确实是一个“真正的”对象(事实上,所有“数组”都是 ECMAscript 中的对象),但它拥有某些属性,使其看起来像“真正的”数组。这些属性是

  • it as a .length财产
  • 它拥有.splice() method

这两个事实足以让大多数 js 引擎 控制台将该对象解释为数组。

Example:

var myObject = { },
    push = Array.prototype.push;

myObject.aNiceFunction = function() {
    console.log(this);
};

push.call( myObject, document.getElementById('foo') );
push.call( myObject, document.getElementById('bar') );

myObject.splice = Array.prototype.splice;

如果我们现在记录我们的对象

console.log( myObject );

我们得到了典型的 jQuery 结果

[div#foo, div#bar]

看看实际情况

但我们仍然可以调用我们的方法.aNiceFunction()在那个物体上。通过推动新元素Array.prototype.push()方法到我们的对象上,ECMAscript 会自动为我们索引这些元素。这是 jQuery 底层发生的事情的简短描述。

再说一下 ECMAscript 中的“数组”。这种语言中没有真正的数组(如果我们忘记了类型数组一秒钟)。只有Object。如果我们有一个对象继承自Array.prototype我们几乎会称它为数组。我们剩下要做的就是设置.length财产给0.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么可以像数组一样查询 jQuery('div') ? 的相关文章

  • 如何防止 Iframe 在与浏览器交互后弄乱浏览器的历史记录?

    因此 就我而言 我使用 Iframe 将 Grafana 附加到我的页面 这为我提供了漂亮且易于使用的图表 可以注意到 每次在图表上进行放大或缩小 使用鼠标单击 交互后 Grafana 的 Iframe 都会在我的 Angular 页面上触
  • 如何监听 jQuery AJAX 请求?

    以下两种实现 ajaxRequest 1 2 的方法应该是等效的 话说回来 为什么验证回调已执行的单元测试 3 在 1 中成功而在 2 中失败 我应该如何重写测试 3 来监视 2 中的成功回调 如果我尝试stub jQuery ajax使用
  • Javascript正则表达式用于字母字符和空格? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我需要一个
  • 除了更改标题之外,如何在 Firefox 中强制另存为对话框?

    有没有办法在 ff 中强制打开 www example com example pdf 的另存为对话框 我无法更改标题 如果您可以将文件以 Base64 格式输出到客户端 则可以使用 data uri 进行下载 location href
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • 如何以编程方式处理 JqGrid 事件?

    我正在使用JqG rid 的 ASP NET 包装器 http www trirand net demoaspnet aspx 我想以编程方式连接一些网格的处理程序events http www trirand com jqgridwiki
  • 在requestAnimationFrame中使用clearRect不显示动画

    我正在尝试在 HTML5 画布上做一个简单的 javascript 动画 现在我的画布是分层的 这样当我收到鼠标事件时 背景层不会改变 但带有头像的顶层会移动 如果我使用 requestAnimationFrame 并且不清除屏幕 我会看到
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • Babel 7 Jest Core JS“TypeError:wks不是函数”

    将我的项目升级到 Babel 7 后 通过 Jest 运行测试会抛出以下错误 测试在 Babel 6 中运行没有任何问题 但在 Babel 7 中失败并出现以下错误 TypeError wks is not a function at Ob
  • 如何使用 JQuery 动态排序

    如果我有一个下拉列表和一个列表框 有没有办法使用 JQuery 根据下拉列表对列表框进行排序 举个例子会很有帮助 这会改变下拉菜单中的顺序 您必须根据自己的标准设置顺序
  • 为什么在 Internet Explorer 中访问 localStorage 对象会引发错误?

    我正在解决一个客户端问题 Modernizr 意外地没有检测到对localStorageInternet Explorer 9 中的对象 我的页面正确使用 HTML 5 文档类型 并且开发人员工具报告该页面具有 IE9 的浏览器模式和 IE
  • 如何获取给定 DOM 元素的所有定义的 CSS 选择器?

    如何使用 jQuery 获取给定 DOM 元素的所有定义的 CSS 选择器 定义后 我的意思是在应用于任何样式表的所有 CSS 选择器document 在某种程度上 这类似于 FireBug 实现的功能 其中显示所选 DOM 元素的所有应用
  • Javascript转换时区问题

    我在转换当前时区的日期时间时遇到问题 我从服务器收到此日期字符串 格式为 2015 10 09T08 00 00 这是中部时间 但是当我使用 GMT 5 中的 new Date strDate 转换此日期时间时 它返回给我的信息如下 这是不
  • 如何更改此 jquery 插件的时区/时间戳?

    我正在使用这个名为 timeago 的插件 在这里找到 timeago yarp com 它工作得很好 只是它在似乎不同的时区运行 我住在美国东部 费城时区 当我将准确的 EST 时间放入 timeago 插件时 比如 2011 05 28
  • 如何在jquery中以相反的顺序迭代元素? [复制]

    这个问题在这里已经有答案了 我是jquery的新手 我想知道如何使用each 在jquery中以相反的顺序迭代表单元素 任何帮助 将不胜感激 尝试这个 input get reverse each function
  • 如何仅在最后一个
  • 处给出透明六边形角度?
  • 我必须制作这样的菜单 替代文本 http shup com Shup 330421 1104422739 My Desktop png http shup com Shup 330421 1104422739 My Desktop png
  • 为什么 jquery 没有检测到单选按钮未被选中的情况? [复制]

    这个问题在这里已经有答案了 可能的重复 JQuery radioButton change 在取消选择期间不会触发 https stackoverflow com questions 5176803 jquery radiobutton c
  • Javascript/Jquery:确定用户是否使用鼠标滚轮、滚动条或键盘滚动

    我正在尝试让用户界面正常工作 如果他们使用鼠标滚轮 我需要让它以一种方式滚动 如果他们使用滚动条 我需要让它以另一种方式滚动 如果他们使用键盘 我需要让它以另一种方式滚动 我相信滚轮和滚动条都充当鼠标事件 但是当单击滚动条时我无法让 jav
  • 导致回发到与弹出窗口不同的页面

    我有一个主页和一个详细信息页面 详细信息页面是从主页调用的 JavaScript 弹出窗口 当单击详细信息页面上的 保存 按钮时 我希望主页 刷新 是否有一种方法可以调用主页的回发 同时还可以从详细信息页面维护保存回发 Edit 使用win

随机推荐

  • OmniAuth Railscast 教程中的 DangerousAttributeError:创建由 ActiveRecord 定义

    我看过ActiveRecord 危险属性错误以及 SO 上的其他类似线程 但它们没有解决相同的问题 我正在关注omniauth教程 http railscasts com episodes 235 omniauth part 1 view
  • C++ 使用 Boost.asio 和 Beast 库在正文中发送数据

    我必须使用 C 库将数据发送到我们公司的 REST Web 服务 我从 Boost 开始 Beast并给出示例hereUbuntu 16 04 环境中的 Code Blocks 下 该文档对我解决以下问题没有帮助 我的代码或多或少与示例相同
  • Pandas 数据框总行数

    我有一个数据框 类似于 foo bar qux 0 a 1 3 14 1 b 3 2 72 2 c 2 1 62 3 d 9 1 41 4 e 3 0 58 我想在数据框的末尾添加一个 总计 行 foo bar qux 0 a 1 3 14
  • 如何在 EF Core 中显示底层 SQL 查询?

    本次结束后 3 点 15 分 NET Core 2 0 发布 视频中 Diego Vega 展示了 Entity Framework Core 2 0 中新功能的演示 其中显示了底层 SQL 的转储在控制台应用程序中 我在 Stack Ov
  • 使用Matlab检测十字中心点

    你好 我有一张如上图所示的图片 我可以使用Matlab检测十字的中心点并输出结果吗 谢谢 干得好 我假设您有图像工具箱 因为如果没有 那么您可能不应该尝试做这类事情 然而 我相信所有这些功能都可以通过卷积来实现 我对上面显示的图像进行了此处
  • 执行 LeScan 时“蓝牙共享已停止工作”

    我面前有一堆不同的 Android 手机 它们都运行 4 3 4 4 它们似乎都遇到了蓝牙方面的一些错误 我正在运行的应用程序只是使用此回调扫描周围的其他蓝牙设备 http developer android com reference a
  • 使用 pandas read_csv 和 nrows 读取约 13000 行 CSV 文件的部分内容

    我正在尝试将 CSV 文件的片段读入 pandas DataFrame 当我将 nrows 设置为超过某个点时 我遇到了麻烦 我的 CSV 文件被分成具有不同标题 数据类型的不同段 因此我浏览了该文件并找到了不同段的行号 并保存了行号 当我
  • 如何加密 ASP.NET 网站中的查询字符串参数? [复制]

    这个问题在这里已经有答案了 在我的一个 ASP Net 网站中 我必须向用户提供一个链接 其中所有查询字符串参数都应加密 我的想法是使用命令 aspnet regiis 用于加密web configdata 将输出作为查询字符串传递到已发布
  • 可以从(完整)git-svn 克隆重新创建 svn 存储库吗?

    如标题所示 有没有办法使用 git svn 从完整克隆重建 svn 存储库 包含从 r1 开始的每个提交 Edit 我可能应该补充一点 我正在寻找一种实用的方法来做到这一点 近乎完美的副本是可以的 只要它仍然像原始 svn 存储库一样可用
  • xls 文档打开后 Apache POI 设置选定的单元格

    我们有下一种情况 我们的系统有 xls 格式的数据导出 这是一个包含许多行和列的巨大文件 用户下载并打开文档后 他会看到文档滚动到最后一列和最后一个电子表格选项卡 这非常烦人 最好将焦点设置在第一个选项卡和第一个单元格上 我做了简单的测试代
  • 通过 Parallel.ForEach 使用多线程依赖

    我使用 Simple Injector 作为我的 IoC 容器 SimpleInjector 使用这种简单的技术可以处理每个线程和每个 Web 请求的混合生活方式 container RegisterPerWebRequest
  • Laravel 5.2 登录会话不持久

    我一直在使用 Laravel 5 2 实现一个简单的身份验证系统Sentinel Route login success Sentinel authenticate array email gt email password gt pass
  • 如何加速 .NET winforms 渲染

    我有一系列表格并在它们之间导航 每个表单都有一组控件 我从 SQLite 数据库加载属性 这是一个很长 大约 1 秒 的操作 不会给用户最好的感觉 因为表单是逐渐绘制的 我不太介意延迟 但我希望在加载所有数据时绘制表单 我想避免新线程 因为
  • Oracle SQL如何编写一条sql语句来验证用户是否在我的网络中(即朋友或朋友的朋友)

    我有这个问题 给定一个users由社交网络中用户的用户名组成的表friends包含用户名和用户朋友名的表 如下所示 username friendname John Thomas Chris James 我正在尝试编写一条 SQL 语句 如
  • firebase 重定向到 URL 的云函数

    我正在尝试为我的移动应用程序创建下载端点 该应用程序可在应用程序商店和游戏商店中使用 我想要一个可供用户在 iOS 设备或 Android 设备上下载应用程序的 URL 我试图找出是否可以为此目的为 firebase 创建一个云函数 我正在
  • Rollup 是否可以保留文件和文件夹结构?

    我正在使用 ES6 导入并使用 Rollup 对其进行转译 输出是单个捆绑文件 Rollup 可以配置为生成文件到文件的转译结果吗 这是我正在使用的当前配置 它显然会输出一个文件 gulp task rollup function cons
  • Rails 4 授权 gem [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找 Rails 4 的授权 gem 以前我用康康舞 但现在看起来已经过时了 我在这里找到了 the rolehttps github com
  • 如何选择字符串多行?

    我在尝试着Select String在多行文本上 Example This is line1
  • 解析非常大的 XML 文件并编组为 Java 对象

    我有以下问题 我有非常大的 XML 文件 例如 300 Megs 我需要解析它们以便将它们的一些值添加到数据库中 这些文件的结构也非常复杂 我想使用 Stax Parser 因为它提供了一次仅拉解析 从而处理 XML 文件的一部分的良好可能
  • 为什么可以像数组一样查询 jQuery('div') ?

    我还有一个关于 jQuery 架构的问题 div 构造一个新的jQuery object div instanceof jQuery true 我想知道为什么可以像数组一样查询它 尽管它不是数组 div 0 returns the firs