jQuery 语法 - 何时使用 $(美元符号)与 jQuery

23

这两者之间有什么区别?

$('#SPANID').html("Some Text");

jQuery('#SPANID').html("Some Text");

这是关于prototype和jQuery的对比吗?

9个回答

39

它们都执行相同的功能。大多数库使用$作为一种更短的方式来访问库内的函数。

jQuery有许多访问其库的方式:

window.jQuery('#SPANID').html("Some Text");

window.$('#SPANID').html("Some Text");

jQuery('#SPANID').html("Some Text");

$('#SPANID').html("Some Text");

如果您使用多个库,可以使用jQuery或window.jQuery代替$。

JQuery有一个名为jQuery.noConflict();的函数,它放弃了jQuery对$变量的控制,使$无法与jQuery一起使用。

这对于使用使用$的多个库非常有用。

因此,当您使用jQuery时,您将执行jQuery('#message').addClassName('read');,而在使用Prototype时,您将执行$('#message').addClassName('read');

(下面的内容有点离题,但如果您想要在多个库中使用$,这将有所帮助)

虽然有一种方法可以同时在不同的库上使用$,即使用匿名函数。如下:

(function($){


})(jQuery);


(function($){


})(Prototype);

每个函数都传递了库对象,因此jQuery和Prototype作为变量$允许我们与许多库一起使用它。如果您将每个库的代码包含在其中,它将起作用。
例如:
(function($){
    $(document).ready(function(){

         $('#message').addClass('read');

    });

})(jQuery);


(function($){
     document.observe("dom:loaded", function() {

         $('message').addClassName('read');
         //Or
         $$('#message').addClassName('read');

     });

})(Prototype);

1
+1 这是一个非常好的详细回答,虽然有点离题 :) - Patricia
1
@Tomgrohl,感谢您的贡献。现在真的很容易理解了。 - shailesh
1
如果您也提到了jQuery.noConflict()就更好了。 - Daniel Sloof
@Daniel 好主意,我会加上的。 - Tom
@Tomgrohl - 原型实际上应该是 $('message').addClassName('read');(从 $ 函数中删除了哈希符号) - robjmills
显示剩余2条评论

17

如果您使用多个JavaScript库,只使用$可能会导致冲突。使用jQuery可以避免这种情况。


5
这是正确的答案。此外,jQuery有一个noConflict()方法,可以调用它来放弃jQuery对$变量的控制权,使其能够与其他框架一起在沙盒中协作。 - twerq
3
只有在使用.noConflict的情况下,这才是正确的答案。 - EndangeredMassa
“使用多个JavaScript库”是什么意思?这是否意味着使用多个JavaScript插件?您能否举个例子,说明在理解基础知识方面可能会出现冲突的情况? - shailesh
@EndangeredMassa - 但是,但是... @twerq说这是正确的答案。我很困惑... ;) - RightSaidFred
我所指的多个库包括:jQuery、Prototype、Ext、YUI。 - Patricia

6

这是同一件事的别名。如果您想在使用$符号的其他库的同一页上使用jQuery,则可以使用带有.noConflict()选项的jQuery。这将允许您将$用于其他库,而将jQuery用于jQuery库。


4

实际上没有什么区别,除了 jQuery('SPANID') 实际上应该是 jQuery('#SPANID')

$ 只是 jQuery 的缩写

编辑:我理解 $ 和 jQuery 之间的真正区别在于可能与其他库发生命名空间冲突。除此之外,它们的工作方式相同。


2
没有区别?你确定吗? - RightSaidFred
有一个打字错误,应该是jQuery('#SPANID')。 - shailesh
$jQuery的别名,它的行为完全相同...除了$更容易发生命名空间冲突(与其他js库)。 - kingjeffrey

1

使用显式的 "jquery" 可以避免冲突,如果您恰好还引用了另一个使用 "$" 的库。


0

更多细节请参见:http://api.jquery.com/ready/

$是jQuery的别名,而jQuery是一个JavaScript库。 插件是以特定方式使用该库,从而创建特定的库用途并扩展其功能。

以下是一些使用示例:

“常规”jQuery代码:

   $(function(){ 
      // my jquery code here
    });

注意:这是一个事件管理器,也就是说,它在DOM准备就绪事件上执行。

插件代码:

(function($){ 
   //theplugin code here 
})( jQuery ); 

这样可以在函数中使用$,而不会产生混淆,因为它表示“将jQuery分配给传入函数的$”。


$(function(){ 
  //stuff here such as jQuery code
});

就像

$(function(){ 
  $("#mybutton").click(function() {
     alert("hi");)
  )};
});

等同于:

(function($) { 
  $(document).ready(function() { 
    $("#mybutton").click(function() {
       alert("hi");
    )};
  }) 
})(jQuery)

但可能不如(没有结尾的绑定(jQuery)),只有在您使用其他使用$的库时才会发挥作用。


$ 只是一个字符,因此你可以有变量,例如:

myvariable = 0; $myvariable = 0; my$variable = 0;

这里没有什么特别之处,只是使用了另一个字符。

恰好 $ 的常见用途是 $ = jQuery; 其他库也使用此字符作为常见的速记符号(类似别名),因此出现了 noconflict 和使用全名(jQuery)。


0

区别在于:$ 经常被其他库或 JavaScript 构造使用,因此它可能会被覆盖并且不能按照您的期望工作。 jQuery 总是指 jQuery 库,因此它将按照您的期望工作。

在无法保证 $ 不会被其他内容覆盖的环境中,使用 jQueryjQuery.noConflict( ) 比使用 $ 更安全。


0

当你已经定义了另一个库的$时,请使用jQuery。当你没有(或在函数作用域内不必担心它时)使用$作为方便的速记符号。

尽管个人认为jq会成为一个不错的速记符号(与$相同的按键数,可能稍微不太常见)。


0

这不仅仅是简写,而且还为其他可能使用$字符的JavaScript库而设计,为了避免混淆或冲突,最好使用jquery关键字。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接