jquery - $.functionName 和 $.fn.FunctionName 之间的区别

2024-01-02

在 jQuery 中,我见过以下两种定义 jQuery 函数的方法:

$.fn.CustomAlert = function() {
  alert('boo!');
};

$.CustomAlert = function() {
  alert('boo!');
};

我知道它们附加到 jQuery 对象(或 $),但是两者有什么区别?我什么时候应该使用其中之一?

Thanks.


我确信这个问题之前已经被问过好几次了,但我找不到链接。

$.fn指向jQuery.prototype。您添加到其中的任何方法或属性都可供 jQuery 包装对象的所有实例使用。

$.something向 jQuery 对象本身添加属性或函数。

使用第一种形式$.fn.something当您处理页面上的 DOM 元素时,您的插件会对这些元素执行某些操作。当插件与 DOM 元素无关时,使用另一种形式$.something.

例如,如果您有一个记录器函数,那么将其与 DOM 元素一起使用就没有多大意义,如下所示:

$("p > span").log();

对于这种情况,您只需将 log 方法添加到 jQuery 对象本身:

jQuery.log = function(message) {
    // log somewhere
};

$.log("much better");

但是,在处理元素时,您可能需要使用其他形式。例如,如果您有一个绘图插件 (plotGraph),它从<table>并生成一个图表 - 您将使用$.fn.* form.

$.fn.plotGraph = function() {
    // read the table data and generate a graph
};

$("#someTable").plotGraph();

在相关说明中,假设您有一个可以与元素一起使用或独立使用的插件,并且您希望将其访问为$.myPlugin or $("<selector>").myPlugin(),您可以为两者重用相同的函数。

假设我们想要一个自定义警报,其中日期被添加到每条警报消息的前面。当用作独立函数时,我们将消息作为参数传递给它,当与元素一起使用时,它使用text作为消息的元素:

(function($) {
    function myAlert(message) {
        alert(new Date().toUTCString() + " - " + message);
    }

    $.myAlert = myAlert;

    $.fn.myAlert = function() {
        return this.each(function() {
            myAlert($(this).text());
        });
    };
})(jQuery);

它被包装在一个自执行函数中,因此 myAlert 不会溢出到全局范围。这是两个插件表单之间重用功能的示例。

正如 theIV 提到的,返回 jQuery 包装的元素本身是一个很好的做法,因为您不想破坏链接。

最后,我发现了类似的问题:-)

  • jQuery.extend 和 jQuery.fn.extend 之间的区别? https://stackoverflow.com/questions/1991126/difference-jquery-extend-and-jquery-fn-extend
  • jQuery 插件 .fn 问题 https://stackoverflow.com/questions/2671734/jquery-plugin-fn-question
  • jQuery 插件创作:为什么有些人使用 jQuery.pluginName,而另一些人使用 jQuery.fn.pluginName? https://stackoverflow.com/questions/538043/jquery-plugin-authoring-why-do-some-do-jquery-pluginname-and-others-jquery-fn-pl
  • 在 jQuery 中,$.myFunction 和 $.fn.myFunction 有什么区别? https://stackoverflow.com/questions/2398007/in-jquery-what-is-the-difference-between-myfunction-and-fn-myfunction
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jquery - $.functionName 和 $.fn.FunctionName 之间的区别 的相关文章

随机推荐

  • 在 shell 脚本中连接到 sqlplus 并运行 SQL 脚本

    我有一个 sql 文件 它是一堆 oracle pl sql 命令 我想创建一个 shell 脚本来运行这些命令 假设user pass server是我的凭据 执行此类任务的 shell 脚本是什么 例如 sqlplus s admin
  • VS Code:选择或删除未选择文本的块注释的快捷方式

    I know there is a shortcut for comment and uncomment code block SHIFT ALT A but is there a way to quickly select or even
  • 在Android中使用GWT源代码

    我有一个基于 GWT 的网络应用程序 我使用相同的代码库来定位桌面和移动平台 我使用基于GIN的Model View Presenter和依赖注入来实现跨平台兼容的目标 然而 为了在 Android 上获得更好的性能和原生外观 我想编写一个
  • 如何解决 WSAEWOULDBLOCK 错误

    我有一个 win7 应用程序 我在 TCP 连接上向 2 个客户端发送数据 在测试时我发现我得到了WSAEWOULDBLOCK我的套接字经常出错 到 解决这个错误我在它周围放置了一个 while 循环 do size t value sen
  • pytorch / numpy 中具有任意和可变维数的部分切片

    给定 numpy 或 pytorch 中的二维张量 我可以同时沿所有维度进行部分切片 如下所示 gt gt gt import numpy as np gt gt gt a np arange 2 3 reshape 2 3 array 0
  • 是否可以在 jtable 中调用自动行排序器

    无论如何 是否可以在使用创建的 jtable 中调用自动行排序器 setAutoCreateRowSorter true 我试图让它按默认列排序 而用户不必单击列标题 table getRowSorter toggleSortOrder m
  • 从 QML 访问 C++ QList

    如果我有 C 中的内容列表 如何将其公开给 QML 在 Qt5 QtQuick 2 中 貌似QML只能看懂QObject 派生类 这是一个问题 因为QObjects 不能放入QList或复制 我该怎么做呢 struct Thing int
  • 将datareader绑定到asp图表控件

    本质上 我有一个数据读取器 理论上它会调用存储过程 并绑定返回到图表的查询 这是我想要绑定到图表的数据 ForecastDesc Previous Current Budget Forecast 4 Forecast 7 Period1 9
  • Android:Fragment 和 ViewPager 始终从第一个位置开始

    我为我的 Android 应用程序使用主 细节设计 如果我单击 ItemListActivity 中列表视图中的某个项目 则该位置将分配给我的 ItemDetailActivity 这个实现了 ViewPager 和 FragmentSta
  • 在 Play 2 框架上配置 QueryDSL

    我尝试配置QueryDSL http www querydsl com 在 Play Framework 使用 Java 中 但没有成功 我在Google上搜索过类似的问题 发现如下 1 查询DSL和播放 https stackoverfl
  • 如何从 postgres 只获取没有区域的时间戳?

    我在 postgres 中创建了一个带有一些时间戳列的表 create table glacier restore progress 4 id SERIAL NOT NULL email VARCHAR 50 restore start t
  • 为什么Fragment的onCreate()有时会先于Activity的onCreate()调用?

    最近我遇到了一个难以重现的问题 当片段尝试使用 Activity 中的数据初始化 ArrayAdapter 时 就会发生 NPE Activity 的 onCreate 方法中初始化的默认列表 Override protected void
  • 如何在 tkinter 文本小部件中标记文本

    请帮我解决这个代码 from tkinter import root Tk def click t insert INSERT t mark names t mark set INSERT 1 1 t mark gravity INSERT
  • JAVA 中列表上的聚合函数

    我有一个 Java 对象列表 我需要应用聚合函数 例如在数据库上进行选择 来减少它 注意 数据是根据多个数据库和服务调用计算得出的 我期望有数千行 并且每次执行每行始终具有相同数量的 单元格 该数量在执行之间会发生变化 Samples 如果
  • 在 Heroku 上部署战争所需的步骤

    我有带有 Maven 的 spring 源工具 我有一个 Java 项目想要部署在 Heroku 上 有人可以告诉我在 Heroku 上部署的步骤吗 非常感谢 Create warMaven 中的文件 您可以通过参考来做到这一点here h
  • Akka 适合短暂网络覆盖的系统吗?

    Akka 是否适合在节点需要进出 WiFi 覆盖范围的系统中使用 必须考虑哪些方面 例如首选哪些传输协议 Akka is适用于具有瞬态网络覆盖的系统 正如 Viktor 在对该问题的评论中指出的那样 主管层次结构可用于处理未交付错误 有关更
  • H2DB 中如何像 MySql 中那样获取 sql 转储?

    我有 H2DB 数据库 它将数据存储在文件中 我有3个文件 test 18 log db test data db and test index db 我想要像我使用时一样获取 SQL 转储文件mysqldump 是否可以 是的 有多种解决
  • 喷气背包上的调整大小组合不起作用

    我正在使用 jetpack compose 1 0 0 beta09 在我的项目上实现一个屏幕 但我在屏幕上遇到了一个问题 即使键盘打开 页脚也需要始终可见 我知道我们有android 上的 adjustResize 在正常活动中解决了这个
  • C++ 中无符号整数提升

    int main unsigned i 5 int j 10 double d i j long l i j int k i j std cout lt lt d lt lt n 4 29497e 09 std cout lt lt l l
  • jquery - $.functionName 和 $.fn.FunctionName 之间的区别

    在 jQuery 中 我见过以下两种定义 jQuery 函数的方法 fn CustomAlert function alert boo CustomAlert function alert boo 我知道它们附加到 jQuery 对象 或