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

时间:2014-09-09 13:58:29

标签: javascript jquery

我加入了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合并到现有代码中的一种快捷方式。

这种方法有问题吗?

3 个答案:

答案 0 :(得分:2)

我会使用它有两个问题。

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

  2. 您仍然可能遇到与jQuery相关模块的兼容性问题。 document.getElementById()返回的内容与jQuery返回的内容(jQuery对象)不同。因此,如果库使用$(“#element”)并获取文档元素而不是jQuery对象,则可能会出现错误。

  3. 我不推荐这个解决方案。相反,为什么不进行$的查找和替换(在包含jQuery之前?

答案 1 :(得分:0)

鉴于即将退休,问题在于您对将接管您的开发人员的关注程度。有些工具可以帮助您重命名旧的$()函数。 @Jason提到找/替,这很可能就足够了。如果没有,Facebook和jsgrep等工具可能有所帮助。回购存档,但我不应该想象工具应该停止工作。

答案 2 :(得分:0)

为什么不用jQuery(...)代替$(...)?当然,它有点长。但复制面食还有什么用呢?