修改jQuery$函数以支持遗留代码

Modifying jQuery $ function to support legacy code

本文关键字:代码 支持 jQuery 函数 修改      更新时间:2023-09-26

我加入了stackoverflow,因为这些年来它对我有很大帮助,我非常擅长JavaScript,我看到了一些可以帮助我的问题。

我很快发现jQuery在stackoverflow上是多么的普遍,所以我决定学习它。我的第一个想法是,Wowzers

我一直在使用我自己的美元符号功能,它很简单:

function $(id) {
  return document.getElementById(id);
}

我知道我可以通过使用noConflict()来重新定义jQuery的$函数。

然而,我想保留它,以防noConflict()破坏任何jQuery插件,因为我希望我的代码在即将退休后能够轻松维护。

问题是,在我的代码中有数以万计的$(...)实例。

我想出了一个方法,我认为将允许我在不破坏自己代码的情况下使用jQuery的$函数:

jQuery.noConflict();
function $(id, context) {
  var r= document.getElementById(id);
  return !r || context ? jQuery(id, context) : r;
}

示例位于http://jsfiddle.net/0nxn3fd5/1/

我很少使用标记名作为id,对于我编写的任何新代码,我都会完全停止这样做。对于我来说,这似乎是将jQuery合并到现有代码中的一种快速方法。

这种方法有问题吗?

使用它有两个问题。

  1. 您可能会为每个jQuery调用查询DOM两次。额外的、不必要的负载。

  2. 与jQuery相关的模块仍然可能存在兼容性问题。getElementById()返回的文档与jQuery返回的内容(jQuery对象)不同。因此,如果一个库使用$("#元素")并返回一个文档元素而不是jQuery对象,那么很可能会出现错误。

我不会推荐这个解决方案。相反,为什么不查找并替换$(在包含jQuery之前?

考虑到即将退休,问题是你有多关心接替你的开发人员。有一些工具可以帮助您重命名旧的$()函数@Jason提到了查找/替换,这很可能就足够了。如果没有,有一些像Facebook的jsgrep这样的工具可能会有所帮助。回购已存档,但我不应该认为该工具因此而停止工作。

为什么不直接使用jQuery(…)而不是$(…)?当然,它稍微长一点。但是复制意大利面还有什么用呢?