在原型存在的地方注入 jQuery - noConflict()

发布于 2024-11-17 01:43:09 字数 639 浏览 3 评论 0原文

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

I'm using webkit only. I need to inject jQuery into a page that already has prototype loaded. I'm using this code to load jQuery. (you can try in console)

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);

I get an error with just the code above.

How can I use noConflict() on load. If I put the following code after injecting the jquery script, I still get an error.

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

This also throw an error:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

家住魔仙堡 2024-11-24 01:43:09

编辑:因为您正在从另一个脚本加载脚本,所以您应该将需要运行的 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 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 );
});

EDIT: Because you're loading the script from another script, you should put the jQuery code you need to run in a callback to a load event for your 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);

   // 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 );
   });
};

Another solution would be to not use this method of loading jQuery. Just hardcode your <script> element, and the code will run in the expected synchronous manner:

<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>

Original answer:

Do this:

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 );
});
送你一个梦 2024-11-24 01:43:09

尝试

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

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

Try

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

You can then use $j for any jquery $

苦妄 2024-11-24 01:43:09

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

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

$ is the alias/shortcut for jQuery (as well as prototype). NoConflict basically releases control of the $ shortcut, so that once called, the other library has control of it. Try this:

jQuery(document).ready(function() {
  // my thing here
});
剧终人散尽 2024-11-24 01:43:09

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

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

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

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
});

Here, you use $ first and then use jQuery.noConflict(), the problem is that you've (wrongly) assumed $ is jQuery before you've set up the no conflict:

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

Here, you've done the opposite. You've done the no conflict bit first, good, but then continued to use $ to access jQuery, which will no longer work (as a direct result of the noConflict() call):

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

Combining your two efforts you end up with the following. I've also added a $ to the .ready line so that inside the ready function you can still use $ as your jQuery reference.

jQuery.noConflict(); // stops $ being associated with jQuery
jQuery(document).ready(function($) { // use long-hand jQuery object reference to call `ready()`
  // my thing here
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文