在我的项目中,我必须在页面加载后动态加载JS和CSS文件。 通过使用下面的代码我能够添加和删除js文件但是通过删除前一个文件添加新文件后,前一个文件没有显示在标题中,但是当我运行代码时,两个js文件代码都被执行.I不知道怎么完全删除文件,有些人可以帮助我。 为此,代码是。
在视图页面标题中: -
<link rel="stylesheet" id="videoCss" />
<script id="videojs"></script>
动态加载JS和CSS文件的Jquery: -
function addRemoveJsCssFile(filename, filetype)
{
var fileref='';
if (filetype == "js") { //if filename is a external JavaScript file
document.getElementById("videojs").remove();
fileref=document.createElement('script');
fileref.setAttribute("type", "text/javascript");
fileref.setAttribute("src", filename);
fileref.setAttribute("id", "videojs");
}
else if (filetype == "css") { //if filename is an external CSS file
document.getElementById("videoCss").remove();
fileref = document.createElement("link");
fileref.setAttribute("rel", "stylesheet");
fileref.setAttribute("type", "text/css");
fileref.setAttribute("href", filename);
fileref.setAttribute("id", "videoCss");
}
if (typeof fileref != "undefined")
document.getElementsByTagName("head")[0].appendChild(fileref)
}
在这个函数中,我们必须传递文件的位置和文件类型,即css或js,以动态添加文件。谢谢。
答案 0 :(得分:1)
不是删除整个元素,而是创建新元素,也许只是尝试更改&#39; src&#39;现有元素中的属性?
现在
document.getElementById("videojs").remove();
fileref=document.createElement('script');
fileref.setAttribute("type", "text/javascript");
fileref.setAttribute("src", filename);
fileref.setAttribute("id", "videojs");
建议
document.getElementById("videojs").setAttribute("src", filename);
答案 1 :(得分:1)
我不知道我是否理解你的问题,但让我试着解释一下:
如果原始脚本位于head部分,它将立即执行,因为Javascript是一种过程语言,所以在“稍后”放置的脚本中你无法做任何事情:之前定义的脚本会更早执行,所以,也许你的问题是当你调用你的函数时,停止执行videojs已经太晚了。
另一方面,使用之前定义的脚本,您无法看到稍后定义的脚本标签..或者更好,如果您推迟,可以使用,但在延迟的情况下,您将再次使用相同的问题进行战斗, videojs脚本将始终执行(它总是太晚或太早,因为你的语句执行时或之前或之后,没有第三种方式)。
当然,您可以在设置一个全局对象之前加载一个脚本,该对象可以说videojs“停止,不要继续你的东西!”但显然你应该编辑videojs代码,使用包装器“if”询问该对象是否有权继续进行,我不认为这是你正在寻找的响应。
但问题是:在javascript videojs中执行了什么,一个在加载时启动的事件绑定器?还是在另一个事件?或者只是一系列执行的语句 - 对于文字游戏而言 - 按顺序对不起?
在第一种情况和第二种情况下,您可以执行以下操作:如果在事件触发时video.js启动,您可以停止执行该功能,在该触发器之前运行:您必须删除事件订阅。要取消绑定事件,您必须知道第一个脚本如何操作以及它所订阅的事件以解除绑定。
以下是如何在jQuery ready事件之前执行脚本(但它对本机javascript事件也有效,所以我认为这可能会有所帮助):
running jQuery code before the dom is ready
这个答案对于每个文档事件都很有用,不仅适用于加载或“jQuery ready”。
但是,即使可以删除绑定“消失”每个videojs脚本效果,它也不是一个干净的工作,因为
所以,我建议您的目的是完全使用此管理器管理脚本的加载和卸载,不要用HTML对它们进行硬编码。
PS:你听说过require.js吗?答案 2 :(得分:1)
试试这个
$('#scriptid').remove(); //remove it first and then add the new one
var script = document.createElement('script');
script.src = something;
document.head.appendChild(script); //Add element to head tag
OR
$("<style type='text/css' href=''></style>").appendTo("head");
$("<script type='text/javascript' src=''></script>").appendTo("head");
答案 3 :(得分:0)
您可以使用$ .getScript()动态加载js文件。