【问题标题】:How to load in an external CSS file dynamically?如何动态加载外部 CSS 文件?
【发布时间】:2011-01-07 03:45:45
【问题描述】:

我正在尝试使用将更改页面颜色的外部 .css 页面创建动态页面。下面是我的代码。但是当我点击href 时,我没有得到任何输出。谁能告诉我我的代码有什么问题?

<script language="JavaScript">
function loadjscssfile(filename, filetype)
{
    if (filetype=="css")
    { 
        var fileref=document.createElement("link")
        fileref.setAttribute("rel", "stylesheet")
        fileref.setAttribute("type", "text/css")
        fileref.setAttribute("href", filename)
    }
    if (typeof fileref!="undefined")
        document.getElementsByTagName("head")[0].appendChild(fileref)
}

loadjscssfile("mystyle.css", "css") 
</script>
<a href="javascript:loadjscssfile('oldstyle.css','css')">Load "oldstyle.css"</a> 

我修改了我的代码如下。尽管如此,我仍然面临着获得输出的问题。没有结果。谁能帮帮我?

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" type="text/css" href="css/newstyle.css" />
<script language="JavaScript" type="text/javascript">
function loadjscssfile(filename, filetype)
{
    if (filetype=="css") 
    {
        var fileref = document.createElement("link");
        fileref.rel = "stylesheet";
        fileref.type = "text/css";
        fileref.href = "filename";
        document.getElementsByTagName("head")[0].appendChild(fileref)
    }
}
loadjscssfile("oldstyle.css", "css") 
</script>
<a href="javascript:loadjscssfile('oldstyle.css','css')">Load "oldstyle.css"</a> 
</head>

【问题讨论】:

标签: javascript html css


【解决方案1】:

' document.createElement("link") ' 创建超链接对象,而不是 css 样式的 tag() 元素,所以你不能动态应用它

如果我错了请纠正我

【讨论】:

  • 这是不正确的。这是一个 元素,这正是他想要加载到外部样式表中的内容。
【解决方案2】:

该代码应该可以工作,除非您可能想将 type="text/javascript" 添加到您的脚本标签。

我通过 Firebug 测试了代码,它对我有用。

也许问题是您的原始样式表仍然包含在页面中,从而覆盖了您的辅助样式表的样式?

【讨论】:

    【解决方案3】:

    试试这个:

    var fileref = document.createElement("link");
    fileref.rel = "stylesheet";
    fileref.type = "text/css";
    fileref.href = "filename";
    document.getElementsByTagName("head")[0].appendChild(fileref)
    

    【讨论】:

    • 我不知道为什么它不适合你。 . .您的浏览器是否报告任何 javascript 错误?您能否确认该函数正在被调用,并且它已到达将附加链接的行(例如通过在其中粘贴警报并查看它是否被调用)?另外,你用的是什么浏览器,什么版本?如果您能回答这些问题,我会尽力提供更多帮助。
    【解决方案4】:

    使用此代码

    document.getElementsByTagName("head")[0].appendChild('<link href="style.css" rel="stylesheet" type="text/css" />');
    

    它可能会起作用,您的代码可能会起作用,但由于其他一些 CSS,它不会反映。

    【讨论】:

      【解决方案5】:

      改变这个

      <a href="javascript:loadjscssfile('oldstyle.css','css')">Load "oldstyle.css"</a> 
      

      <a href="javascript:void(0)" onclick="loadjscssfile('oldstyle.css','css');">Load "oldstyle.css"</a> 
      

      我相信 onclick,href 事件会重新加载新文件。

      【讨论】:

        【解决方案6】:

        首先,&lt;head&gt; 部分中不能有锚元素。其次,你确定你的 CSS 路径是正确的吗?我问是因为您已经引用了css/newstyle.css,但您正在尝试加载newstyle.css。确定不是css/newstyle.css

        编辑: Here 是您自己的代码的工作示例。还有其他问题。尝试静态链接 CSS 并查看是否获得样式。如果没有,您的样式表中可能有错误。

        通过静态链接样式表,我的意思是在您的页面中添加它而不是从 javascript 加载

        <link rel="stylesheet" type="text/css" href="css/oldstyle.css" />
        

        【讨论】:

        • 嗨,我已将其从 newstyle.css 更改为 css/newstyle.css 但仍然无法正常工作
        • 那么,文件夹中是否存在文件?
        • 是的,它在同一个文件夹中的路径是正确指定的,这是肯定的
        • 如果通过链接标签静态链接它是否有效?您确定样式表中没有错误吗?
        • 是的,我试过了,当我点击链接时,它只是保持相同的颜色没有任何变化..即使它也没有显示任何错误..
        【解决方案7】:

        Tim Goodman 的回答是正确的,但应该是 fileref.href = "filename"; 而不是 fileref.href = filename;

        否则,您将尝试加载名称为“文件名”的文件,而不是您传递给脚本的文件。

        或者,如果您愿意使用jQuery 库,这可以在一行中完成:
        $("head").append("&lt;link rel='stylesheet' id='extracss' href='"+filename+"' type='text/css' /&gt;");

        另外,关于使用 setAttribute 的脚本的第一个版本:由于规范的设置方式,大多数浏览器只会采用带有空的第三个参数的 setAttribute:
        fileref.setAttribute("href", filename, "");

        【讨论】:

          【解决方案8】:

          尝试在您的 html 中添加样式行并在 css 中使用 @import 来获取新文件

          【讨论】:

            猜你喜欢
            • 2011-01-07
            • 2019-03-16
            • 2021-11-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多