$和jQuery有什么区别?

21

当我在$(document).ready中使用$("#div_id")时,它返回NULL,但当我使用jQuery("#div_id")时,它返回实际对象!

为什么会这样发生?

更新:我尝试了noConflict方法,但没有得到任何提示。

jQuery.noConflict()
function (a,b){return new c.fn.init(a,b)}

$.noConflict();
TypeError: Object function ()
    {
        return document.getElementById.apply(document, arguments)
    } has no method 'noConflict'

更新2:

$(document).ready(function() {
    debugger;
});

<input type="text" id="test" name="test" value="123" />

当我在控制台中运行以下代码时,我得到了这些结果:

$("#test").val()
TypeError: Cannot call method 'val' of null
jQuery("#test").val()
"123"

感谢


1
听起来像是Firebug覆盖了$,使其成为document.getElementById - Raynos
我在不启用Firebug的情况下加载页面,有时会提示元素未找到的错误。但其他时候它可以正常工作。 - wael34218
6个回答

19

请查看jQuery.noConflict()。你的页面上可能有其他javascript库正在使用$变量吗?

$只是一个用于别名化jQuery的变量,并且作为变量,它可以被赋任何值。


它什么时候被别名了?我在一个新的HTML页面上尝试了jQuery("#checkbox1")#("#checkbox1"),没有使用任何插件,第一个运行良好,而另一个返回NULL。我在该测试中使用的是jQuery 1.5.2。 - wael34218
@wael34218 嗯...有点好奇,我需要看一些示例代码才能猜测出问题所在。你能否发布一个简单的页面来重现这个错误? - Graham
我又更新了帖子,请查看。如果我放置警报来显示$("#test")/jQuery("#test")的值,而不是调试器,有时它会起作用,有时它不会。 - wael34218
我说了同样的话,但我的面试官似乎不同意。 :( - Dipak

10

$jQuery 本质上是相同的,只不过 $jQuery 的别名,你可以通过 jQuery.noConflict 模式来更改或删除它。


它什么时候被别名了?我在一个新的HTML页面上尝试了jQuery("#checkbox1")和#("#checkbox1"),没有任何插件,第一个像魔法一样工作,而另一个返回NULL。我在测试中使用了jQuery 1.5.2。 - wael34218
请尝试使用 $("#checkbox1") 而不是 #("#checkbox1") - sanmai
哈哈,我的评论中有个打字错误,我的代码应该是 $("#checkbox1") - wael34218

6

$也被用于类似于jQuery的javascript框架Prototype.js中。您的项目可能也包含对此框架的引用。

了解原型dollar如何工作的更多信息,请单击这里

您可以使用noConflict语句使两者共同工作,如其他答案所述。我们正在其中一个项目中执行此操作,该项目使用$(element)进行传统原型代码和jQuery(element)进行新的jQuery代码。


1
我完全没有使用原型,也没有计划使用。我的想法是只使用jQuery和jQuery != $,这让我感到困惑。 - wael34218
可能是因为你正在处理一个遗留应用程序,其中包含对其他旧版js框架的引用。如果不是这种情况,请忽略此答案 =) - koenmetsu
我正在处理一份非常古老的代码,这份代码是由古希腊人开发的。但当我在一个只包含jQuery 1.5.2的新HTML文件上尝试运行它时,出现了同样的问题。 - wael34218
它可以包含在您的主页面之一吗? - koenmetsu
不,我不这么认为。我写了一个简单的HTML测试页面,出现了相同的行为。 - wael34218

3

看起来某些东西占用了$符号,如果想要重新将jQuery赋值给$,请尝试以下操作:

var $ = jQuery;

2
也许您有另一个使用$符号的库?

1
如果您查看noConflict jQuery文档,http://api.jquery.com/jQuery.noConflict/。 - Mike Miller
我没有使用任何可能覆盖它的库。 - wael34218

2

jQuery$是相同的 - 可以看看jQuery源代码:

window.jQuery = window.$ = jQuery;

也许你使用了另一个使用变量$的库,那么你就需要解决命名冲突问题。
<script type="text/javascript">
  jQuery.noConflict();
  jQuery(document).ready(function($) {
    // Code that uses jQuery's $ can follow here.
  });
  // Code that uses other library's $ can follow here.
</script>

或者您可以使用以下代码片段(在其主体中不会有$冲突):

// Method 1
jQuery(document).ready(function($){
    /* some code that uses jQuery $ */ 
});

// Method 2
(function($) {
    /* some code that uses jQuery $ */ 
})(jQuery);

我只使用jQuery而没有其他库。试一试,制作一个需要jQuery的简单HTML页面,你就会看到$和jQuery之间的区别。 - wael34218

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