我正在尝试制作一个带有预览功能的实时页面内 css 编辑器,该功能将重新加载样式表并应用它而无需重新加载页面。解决这个问题的最佳方法是什么?
有没有一种简单的方法可以在不重新加载页面的情况下重新加载 css?
IT技术
javascript
css
stylesheet
reload
2021-02-01 21:41:28
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);
});
}
在“编辑”页面上,不要以正常方式(使用<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
绝对没有必要为此使用 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 += "";
}
}
查看 Andrew Davey 时髦的 Vogue 项目 - http://aboutcode.net/vogue/
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())
}