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

标签 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 合并到现有代码中的快速方法。

这种方法有问题吗?

最佳答案

使用它时我有两个担忧。

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

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

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

关于javascript - 修改 jQuery $ 函数以支持遗留代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25746562/

相关文章:

javascript - 如何彻底处置EaselJS Canvas ?

javascript - 如何使我的 Etch-A-Sketch 网格在悬停时改变颜色和不透明度?

java - 什么时候不使用 Google Web Toolkit?

javascript - 无法创建多个按钮模式

javascript - 密码验证至少为 6 个字符

javascript - Jquery 循环 : iterate siblings by four, 然后从头开始

javascript - Jquery:检查是否已单击列表中的所有链接

javascript - 数组中的 AngularJS 对象到新对象

ajax - IPAD网络_ERR : XMLHttpRequest Exception 101 using safari and chrome on jquery ajax call

jquery - 将 TinyMCE 编辑器的选定内容复制到剪贴板