有没有一种简单的方法可以在不重新加载页面的情况下重新加载 css?

IT技术 javascript css stylesheet reload
2021-02-01 21:41:28

我正在尝试制作一个带有预览功能的实时页面内 css 编辑器,该功能将重新加载样式表并应用它而无需重新加载页面。解决这个问题的最佳方法是什么?

6个回答

可能不适用于您的情况,但这是我用于重新加载外部样式表的 jQuery 函数:

/**
 * Forces a reload of all stylesheets by appending a unique query string
 * to each stylesheet URL.
 */
function reloadStylesheets() {
    var queryString = '?reload=' + new Date().getTime();
    $('link[rel="stylesheet"]').each(function () {
        this.href = this.href.replace(/\?.*|$/, queryString);
    });
}
我不确定是不是因为我只是从磁盘打开 chrome 上的页面,但这对我不起作用。
2021-03-21 21:41:28
2021-03-31 21:41:28
这个非 jquery one-liner 在 chrome 中对我有用: var links = document.getElementsByTagName("link"); for (var i = 0; i < links.length;i++) { var link = links[i]; if (link.rel === "stylesheet") {link.href += "?"; }}
2021-04-02 21:41:28

在“编辑”页面上,不要以正常方式(使用<link>标签)包含您的 CSS,而是将其全部写入<style>标签。编辑它的innerHTML属性将自动更新页面,即使没有往返服务器。

<style type="text/css" id="styles">
    p {
        color: #f0f;
    }
</style>

<textarea id="editor"></textarea>
<button id="preview">Preview</button>

Javascript,使用 jQuery:

jQuery(function($) {
    var $ed = $('#editor')
      , $style = $('#styles')
      , $button = $('#preview')
    ;
    $ed.val($style.html());
    $button.click(function() {
        $style.html($ed.val());
        return false;
    });
});

应该是这样!

如果你真的很喜欢,可以将函数附加到 textarea 上的 keydown,尽管你可能会得到一些不需要的副作用(页面会在你输入时不断变化)

编辑:经过测试并有效(至少在 Firefox 3.5 中,但在其他浏览器中应该没问题)。在此处查看演示:http : //jsbin.com/owapi

顺便说一句,您可以将一个函数附加到 textarea 上的 keydown,但使用 lo-dash(例如)对其进行节流
2021-03-17 21:41:28
如果它被href'ed怎么办?
2021-03-18 21:41:28
IEinnerHTML<style>元素(和<script>阻塞
2021-04-04 21:41:28

绝对没有必要为此使用 jQuery。以下 JavaScript 函数将重新加载所有 CSS 文件:

function reloadCss()
{
    var links = document.getElementsByTagName("link");
    for (var cl in links)
    {
        var link = links[cl];
        if (link.rel === "stylesheet")
            link.href += "";
    }
}
我在控制台中使用它,所以我不需要在我的代码中添加任何其他内容
2021-03-23 21:41:28
很好的答案,因为它不依赖于 jQuery!:)
2021-04-08 21:41:28
@Bram 花括号是可选的。代码工作正常。
2021-04-12 21:41:28
只是想知道 === 的目的 - 什么时候rel属性值可以是“样式表”但它的类型不是字符串?
2021-04-12 21:41:28

查看 Andrew Davey 时髦的 Vogue 项目 - http://aboutcode.net/vogue/

这正是我一直在寻找的。它会在样式表更改后立即重新加载 CSS,无需手动刷新页面。非常感谢分享:)
2021-03-27 21:41:28
Vogue 可以在 wamp 本地运行吗?
2021-04-09 21:41:28
我试过重新加载脚本,比如 Vogue。但在 Chrome 中是问题,因为 olest 样式表文件保留在浏览器中并正常工作。例如,在一个元素中,我将背景从红色更改为白色,并且我必须禁用最后一种颜色为红色。
2021-04-11 21:41:28

Vanilla JS 中的一个较短版本,并在一行中:

for (var link of document.querySelectorAll("link[rel=stylesheet]")) link.href = link.href.replace(/\?.*|$/, "?" + Date.now())

或扩展:

for (var link of document.querySelectorAll("link[rel=stylesheet]")) {
  link.href = link.href.replace(/\?.*|$/, "?" + Date.now())
}