如何正确使用$ inside函数/自调用,这是通过jQuery的noConflict进程的一部分?

时间:2016-06-08 19:33:45

标签: jquery

使用以下代码,我想在函数声明中使用$ inside,然后在自调用函数内部引用它。使用noConflict()时如何执行此过程?当我运行以下代码时,我得到“未捕获的TypeError:$不是函数”

//I have jQuery 2.2.4 linked at the bottom of my page like this...

//<script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="crossorigin="anonymous"></script>

//then my code...

var jq224 = $.noConflict();

function dosomething(){
$("#wrapper").append('<p>connect me</p>');
}

function doanotherthing(){
$("#someid").append('<p>show me something more</p>');
}

(function($) { 
  dosomething();
  doanotherthing();
}(jq224));

为什么上述过程会出错?但是,如果我执行以下操作,则不会产生错误...

  (function($) { 
     $("#wrapper").append('<p>connect me</p>');
    }(jq224));

2 个答案:

答案 0 :(得分:2)

致电noConflict后,$的“之前”引用已恢复。由于先前未声明$,因此现在还不知道。

然而,您可以将$传递给您正在调用的函数:

var jq224 = $.noConflict();

function dosomething($) {
  $("#wrapper").append('<p>connect me</p>');
}

function doanotherthing($) {
  $("#someid").append('<p>show me something more</p>');
}

(function($) {
  dosomething($);
  doanotherthing($);
}(jq224));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>

<div id='wrapper'>wrapper</div>
<div id='someid'>someid</div>

答案 1 :(得分:1)

这是因为您将jQuery设置为noConflict,然后您尝试访问两个方法中的$

function dosomething(){
    $("#wrapper").append('<p>connect me</p>');
}

function doanotherthing(){
    $("#someid").append('<p>show me something more</p>');
}

此时$不再与jQuery相关联,例如因为您还拥有使用$字符的Microsoft.Ajax js文件,因此您可以将其用作

function dosomething(){
  jq224("#wrapper").append('<p>connect me</p>');
}

function doanotherthing(){
   jq224("#someid").append('<p>show me something more</p>');
}

或使用立即调用的函数

(function($) { 
     // in this function scope $ is 'just' one of the parameters that has been set as jq224
     $("#wrapper").append('<p>connect me</p>');
}(jq224));