我在cms系统中使用Highcharts创建了一些图表。
我只允许将HTML和Javascripts放在一个小“框”中。这里我包括Jquery和Highcharts库。还有我自己的剧本。
我的问题是cms系统在网站的末尾包含另一个Jquery库(在我的“box”之后)。
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script src="http://code.highcharts.com/highcharts.js"></script>
<script src="http://code.highcharts.com/maps/modules/map.js"></script>
<script src="http://code.highcharts.com/maps/modules/data.js"></script>
<script src="http://code.highcharts.com/maps/modules/exporting.js"></script>
$(function () {
$.getJSON('http://www.highcharts.com/samples/data/jsonp.php?filename=us-population-density.json&callback=?', function (data) {
$.each(data, function () {
this.code = this.code.toUpperCase();
});
[...]
== MY PART ENDS ==
[...]
<script type="text/javascript" src="jquery/js/jquery-1.8.3.min.js"></script>
此代码包含我的图表(当Jquery加载两次时),我想找到一个快速而肮脏的解决方案来阻止浏览器加载第二个Jquery文件。
如:
<script>
script = document.getElementsByTagName('script');
for(i = 0;i < script.length; i++)
{
if (script[i].src == "jquery/js/jquery-1.8.3.min.js")
document.getElementsByTagName('script')[i] = "";
}
</script>
但是这不起作用,因为脚本标签是在cms中的“我的部分”之后。
你有解决方案吗?
答案 0 :(得分:2)
删除脚本标记不会清除内存,即使在删除脚本标记之后执行的内容仍然存在。
你是否试着坚持第一个jQuery,例如,通过重命名你的'$'或用像($)这样的参数调用你的包装函数?
答案 1 :(得分:1)
我不知道你可以修改脚本标签,但你可以使用选择器。例如;
<script id="jquery1" src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
然后你可以用id选择器删除它,就像$(&#34; #jquery1&#34;)。remove(); 如果没有被误解,那就是它。
答案 2 :(得分:1)
尝试使用jQuery.noConflict(true)来防止不同版本或库之间的冲突,请在documentation阅读更多内容。而且jsFiddle表明使用$引用了jquery的第一个加载版本
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery.noConflict demo</title>
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<div id="log">
<h3>Before $.noConflict(true)</h3>
</div>
<script src="//code.jquery.com/jquery-1.6.2.js"></script>
<script>
var $log = $( "#log" );
$log.append( "2nd loaded jQuery version ($): " + $.fn.jquery + "<br>" );
// Restore globally scoped jQuery variables to the first version loaded
// (the newer version)
jq162 = jQuery.noConflict( true );
$log.append( "<h3>After $.noConflict(true)</h3>" );
$log.append( "1st loaded jQuery version ($): " + $.fn.jquery + "<br>" );
$log.append( "2nd loaded jQuery version (jq162): " + jq162.fn.jquery + "<br>" );
</script>
</body>
</html>