Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 修改jQuery$函数以支持遗留代码_Javascript_Jquery - Fatal编程技术网

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

Javascript 修改jQuery$函数以支持遗留代码,javascript,jquery,Javascript,Jquery,我加入了stackoverflow,因为多年来它对我帮助很大,我非常擅长JavaScript,我看到了一些我可以提出的问题 我很快发现jQuery在stackoverflow上是多么无处不在,所以我决定学习它。我的第一个想法是,沃泽 我一直在使用我自己的美元符号函数,它很简单: function $(id) { return document.getElementById(id); } 我知道我可以使用noConflict()重新定义jQuery的$函数 但是,我想保留它,以防noConf

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

我很快发现jQuery在stackoverflow上是多么无处不在,所以我决定学习它。我的第一个想法是,沃泽

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

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;
}
举例

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


这种方法有问题吗?

使用这种方法我会有两个顾虑

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

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


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

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

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

    jQuery有类似
    $的访问方法。get
    ,所以你可以避免这些问题。我不知道为什么这些答案中有一些被否决了。任何回复都很感谢。
    $.noConflict()
    不能破坏插件,或者至少只能破坏那些写得很糟糕的插件,你无论如何都不会使用它们。@Jakub,这是一个非常有力的论点。我可以重新“获取”它是通过添加
    $.get=jQuery.get
    来实现的。但我想知道还有多少其他jQuery方法需要这样做。谢谢,@Bergi。我发现了一个关于使用
    $.noConflict()中断的插件的旧堆栈溢出
    。所以我不确定这种情况发生的频率:我猜jQuery即将退休?请提供索赔来源。@Tom指的是我自己即将退休。更新1500多个文件有点太多,但这可能是我的最佳选择。@Jason,既然已经解释过了,你介意取消否决票吗?我会……但确实是这样不是我。我也不同意否决票。1是一个非常有效的观点。我考虑过这一点,但考虑到方便,决定这将是一个较小的成本。我不太确定2。我的$函数只会在存在同名id的情况下返回getElementById。因此,它将在旧代码上运行,这不会产生任何jQuery调用。例如,如果您将ID命名为与标记名相同的ID,则为#2。例如,如果您选择了#(“表单”)HTML页面中有一个带有#form和form标记的元素,最终得到的是ID,而不是标记。此外,Jakub Michalek在评论中提到的其他jQuery方法也是一个问题。许多库将使用$.ajax和其他类似方法。当我将jQuery合并到自己的代码中时,我想我会捕获任何ID实例在测试期间与标记名相等。但是,这可能会在我退休时影响我的替换,因此这肯定是一个有效点。我认为(退休/替换)这确实是最大的因素。如果有人进入一个站点并查看其jQuery,他们会假设这是jQuery的标准实现。如果他们试图使用$.ajax或选择一个ID/标记名,他们会遇到非常令人费解的问题。我不认为在键入代码时复制/粘贴会有帮助。我正在考虑重新定义
    jQuery
    简单地说就是
    j
    ,但这可能会破坏循环变量。