2

我只使用 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

4 回答 4

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 );
});
于 2011-06-23T22:25:07.267 回答
2

尝试

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

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

于 2011-06-23T22:09:40.560 回答
1

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

jQuery(document).ready(function() {
  // my thing here
});
于 2011-06-23T22:08:00.997 回答
1

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

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

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

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

结合您的两项努力,您最终会得到以下结果。我还在$.ready行中添加了一个,以便在ready函数内部仍然可以用作$jQuery 参考。

jQuery.noConflict(); // stops $ being associated with jQuery
jQuery(document).ready(function($) { // use long-hand jQuery object reference to call `ready()`
  // my thing here
});
于 2011-06-23T22:25:40.840 回答