注入jQuery Prototype exsists - noConflict()

时间:2011-06-23 22:05:33

标签: prototypejs inject jquery

我只使用webkit。我需要将jQuery注入到已加载原型的页面中。我正在使用此代码加载jQuery。 (你可以在控制台试试)

var s = document.createElement('script');
s.setAttribute('src', 'http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.js');
s.setAttribute('type', 'text/javascript');
document.getElementsByTagName('head')[0].appendChild(s);

我上面的代码出错了。

如何在加载时使用noConflict()。如果我在注入jquery脚本后放入以下代码,我仍然会收到错误。

$(document).ready(function() {
  jQuery.noConflict();
  // my thing here
});

这也会引发错误:

jQuery.noConflict();
$(document).ready(function() {
  // my thing here
});

4 个答案:

答案 0 :(得分:3)

编辑:因为您要从其他脚本加载脚本,所以您应该将回调中运行所需的jQuery代码放到脚本的加载事件中:

var s = document.createElement('script');
s.setAttribute('src', 'http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.js');
s.setAttribute('type', 'text/javascript');
document.getElementsByTagName('head')[0].appendChild(s);

   // Place your code in an onload handler for the jQuery you're loading
s.onload = function() {

    jQuery.noConflict(); // release jQuery's hold on "$"

    jQuery(document).ready(function( $ ) {

      alert( $.fn.jquery );
   });
};

另一种解决方案是使用这种加载jQuery的方法。只需对<script>元素进行硬编码,代码将以预期的同步方式运行:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.js" type="text/javascript"></script>

<script type="text/javascript">
    jQuery.noConflict(); // release jQuery's hold on "$"

      // do this with ready() -------v------ and the "$" will be available inside
    jQuery(document).ready(function( $ ) {

      // $ is safe for jQuery inside this .ready() callback
      alert( $.fn.jquery );
    });
</script>

原始回答:

这样做:

var s = document.createElement('script');
s.setAttribute('src', 'http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.js');
s.setAttribute('type', 'text/javascript');
document.getElementsByTagName('head')[0].appendChild(s);


jQuery.noConflict(); // release jQuery's hold on "$"

  // do this with ready() -------v------ and the "$" will be available inside
jQuery(document).ready(function( $ ) {

  // $ is safe for jQuery inside this .ready() callback
  alert( $.fn.jquery );
});

答案 1 :(得分:2)

尝试

var $j = jQuery.noConflict();
$j(document).ready(function() {
  // my thing here
});

然后您可以将$ j用于任何jquery $

答案 2 :(得分:1)

$是jQuery(以及原型)的别名/快捷方式。 NoConflict基本上释放了$快捷方式的控制权,因此一旦被调用,另一个库就可以控制它。试试这个:

jQuery(document).ready(function() {
  // my thing here
});

答案 3 :(得分:1)

在这里,您首先使用$,然后使用jQuery.noConflict(),问题是您在设置无冲突之前(错误地)认为$是jQuery:

$(document).ready(function() {
  jQuery.noConflict();
  // my thing here
});

在这里,你做了相反的事情。你首先完成了无冲突,好,但后来继续使用$来访问jQuery,它将不再起作用(作为noConflict()调用的直接结果):

jQuery.noConflict();
$(document).ready(function() {
  // my thing here
});

结合您的两项努力,您最终得到以下结论。我还在$行中添加了.ready,以便在<{1}}函数内可以仍然使用ready作为jQuery参考。

$