我只使用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
});
答案 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参考。
$