如何在页面加载后通过jquery完全删除和添加js文件?

时间:2016-11-08 10:05:10

标签: javascript jquery css

在我的项目中,我必须在页面加载后动态加载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,以动态添加文件。谢谢。

4 个答案:

答案 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脚本效果,它也不是一个干净的工作,因为

  1. 总体而言,videojs已被执行
  2. 这仅适用于videojs,至少它只适用于使用相同事件启动的硬编码脚本,但不适用于所有硬编码脚本
  3. 所以,我建议您的目的是完全使用此管理器管理脚本的加载和卸载,不要用HTML对它们进行硬编码。

    PS:你听说过require.js吗?

    If not, take a look here

答案 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文件。