I have a page which has <link> in the header that loads the CSS named light.css. I also have a file named dark.css. I want a button to swap the style of the page all together (there are 40 selectors used in css file and some do not match in two files).

我如何用JS删除对light.css的引用,删除所有应用的样式,然后加载dark.css并应用其中的所有样式?我不能简单地重置所有元素,因为有些样式是通过不同的css文件应用的,有些是由JS动态生成的.有没有一种简单而有效的方法可以在不重新加载页面的情况下实现这一点?Vanilla JS更可取,不过我会在以后的处理中使用jQuery,所以jQ也可以.

推荐答案

您可以创建一个新链接,并用新链接替换旧链接.如果您将其放入函数中,则可以在需要的任何地方重用它.

The Javascript:

function changeCSS(cssFile, cssLinkIndex) {

    var oldlink = document.getElementsByTagName("link").item(cssLinkIndex);

    var newlink = document.createElement("link");
    newlink.setAttribute("rel", "stylesheet");
    newlink.setAttribute("type", "text/css");
    newlink.setAttribute("href", cssFile);

    document.getElementsByTagName("head").item(cssLinkIndex).replaceChild(newlink, oldlink);
}

HTML:

<html>
    <head>
        <title>Changing CSS</title>
        <link rel="stylesheet" type="text/css" href="positive.css"/>
    </head>
    <body>
        <a href="#" onclick="changeCSS('positive.css', 0);">STYLE 1</a> 
        <a href="#" onclick="changeCSS('negative.css', 0);">STYLE 2</a>
    </body>
</html>

为了简单起见,我使用了内联javascript.在制作中,你会希望使用不引人注目的事件监听器.

Jquery相关问答推荐

JQuery UI-AutoComplete未显示下拉菜单

Django BaseDataTableView-Filter_queryset方法不起作用

我在自定义 WordPress 插件中使用 ajax 时收到错误请求

为什么函数没有进入

可以推迟 jQuery 的加载吗?

Jquery $(this) 子 Select 器

jQuery:使用变量作为 Select 器

Bootstrap 3 RC 1 中的 typeahead JavaScript 模块在哪里?

如何使用 jQuery 的 getJSON() 方法传递请求标头?

按值对 Html Select 的选项进行排序的最有效方法是什么,同时保留当前选定的项目?

jQuery中的Grep与过滤器?

为什么使用 jQuery on() 而不是 click()

jQuery DataTables:延迟搜索直到输入 3 个字符或单击按钮

jquery分别绑定双击和单击

如何使用jQuery触发类更改事件?

在 jQuery 中 Select 后代元素的最快方法是什么?

$.ajax 的成功和 .done() 方法有什么区别

在 javascript/浏览器中缓存 jquery ajax 响应

jQuery clone() 不克隆事件绑定,即使使用 on()

bootstrap 日期和时间 Select 器