10

jQuery("...")写而不是写是个好习惯$("...")吗?

我听说如果他们也使用它,它可能有助于避免将来与其他库发生冲突$,但这是现实世界的担忧吗?假设我真的不知道我将来会使用哪些其他库,所以我应该避免$("...")在我的脚本中编写吗?是否还有其他知名的图书馆也依赖$

另外我很想知道这个主题是否还有其他问题。

4

6 回答 6

7

将 $ 用于 jQuery 是完全安全的,它是 jQuery 惯用语,至少在您自己控制的页面上是这样。

如果您确实选择在小部件中使用 jQuery,您可以以防止它发生冲突的方式构造它。

一般来说,jQuery 绑定到 $ 和 jQuery,所以单独使用 jQuery 并不能保证你的安全。

如果您担心冲突,jQuery 会公开 $.noConflit(); http://api.jquery.com/jQuery.noConflict/

这放弃了对 $ 的控制,您可以将 jQuery 存储在您选择的变量中(或使用 jQuery)。

以下是基于Wikipedia 页面和此stackoverflow 答案使用 $ 符号的库:

扫描这个页面,唯一想到的是:

  1. jQuery - 提供 jQuery.noConflict() 来释放 $
  2. 原型
  3. MooTools

然而 jQuery 正在以大约 90% 的市场份额扼杀它。

  1. http://www.theregister.co.uk/2012/08/14/jquery_used_by_half_of_all_websites/
  2. https://stackoverflow.com/questions/176324/why-does-everyone-like-jquery-more-than-prototype-script-aculo-us-or-mootools-or
于 2013-06-02T15:14:06.513 回答
5

您可以使用销售调用函数包装您的代码并使用您想要的名称

(function (JQUERY, otherLIB) {
  // ...
}(jQuery, $))
于 2013-06-02T15:15:10.623 回答
4

如果您使用该.ready()函数(或快捷方式版本)来包装您的代码,那么已经有内置功能可以让您安全地访问 jQuery 库。那是通过在您提供的回调中定义一个函数参数。

jQuery(document).ready(function($) { 
    /* in here, $ is safe */ 
}); 

jQuery(function($) { 
    /* in here, $ is safe */ 
});

由于 jQuery 将自己作为第一个参数传递给回调,因此您可以给它任何您想要的名称,包括$. 因为它形成了一个局部参数,所以它不会被全局空间中的相同名称所影响,也不会影响它。

这样就不需要.noConflict()或手动的 IIFE 方法。您需要的一切都已经为您准备好了。

于 2013-06-02T15:38:34.690 回答
2

$ 现在经常使用,如果您不使用它,可能会被其他库事件使用。您可以使用jQuery.noConflict

许多 JavaScript 库使用 $ 作为函数或变量名,就像 jQuery 一样。在 jQuery 的例子中,$ 只是 jQuery 的别名,所以所有功能都可以在不使用 $ 的情况下使用。如果您需要与 jQuery 一起使用另一个 JavaScript 库,请通过调用 $.noConflict() 将 $ 的控制权返回给另一个库。$ 的旧引用在 jQuery 初始化期间被保存;noConflict() 只是恢复它们,参考。

于 2013-06-02T15:14:06.023 回答
2

$只是一个简写命名空间,由于 jQuery 众所周知,许多 javascript 框架倾向于将其$视为保留的命名空间并回避使用它。也就是说,任何人都很容易将任何代码命名为window.$.

如果你知道$命名空间到底指的是什么,你可以删除 jQuerys 对该命名空间的绑定,并在全局范围之外自己重新绑定它。

jQuery.noConflict();

(function($) {

    // your code that can use $ as jQuery namespace

})(jQuery);
于 2013-06-02T15:17:25.457 回答
1

其他一些库也使用美元符号。例如,Mootools也可以使用它。但总有可能使用 jQuery 的noConflict模式,因此您可以非常安全地在代码中使用美元符号。

于 2013-06-02T15:17:25.407 回答