我想通过JavaScript重新加载HTML页面中的所有CSS样式表,而不需要重新加载页面。
我只需要在开发过程中使用此功能,以反映CSS更改,而无需一直刷新页面。
一种可能的解决方案是使用JavaScript向CSS href添加?id=randomnumber
后缀,但我不想这样做。
我希望以某种方式重新加载样式表,而不更改其URL,浏览器将决定是否需要加载该CSS的新版本(如果服务器响应为304-未修改
)。
如何实现这一点?
我想通过JavaScript重新加载HTML页面中的所有CSS样式表,而不需要重新加载页面。
我只需要在开发过程中使用此功能,以反映CSS更改,而无需一直刷新页面。
一种可能的解决方案是使用JavaScript向CSS href添加?id=randomnumber
后缀,但我不想这样做。
我希望以某种方式重新加载样式表,而不更改其URL,浏览器将决定是否需要加载该CSS的新版本(如果服务器响应为304-未修改
)。
如何实现这一点?
使用纯Javascript:
var links = document.getElementsByTagName("link");
for (var x in links) {
var link = links[x];
if (link.getAttribute("type").indexOf("css") > -1) {
link.href = link.href + "?id=" + new Date().getMilliseconds();
}
}
在jQuery中:$("link").each(function() {
if $(this).attr("type").indexOf("css") > -1) {
$(this).attr("href", $(this).attr("href") + "?id=" + new Date().getMilliseconds());
}
});
请确认在DOM树加载后再载入此函数。var x
。 - iConnorif ($(this).attr("type").indexOf("css") > -1) {
- user2226755首先,将id(如果不存在)添加到样式表链接标签中,如下所示:
<link id="mainStyle" rel="stylesheet" href="style.css" />
function freshStyle(stylesheet){
$('#mainStyle').attr('href',stylesheet);
}
$('#logo').click(function(event){
event.preventDefault();
var restyled = 'style.css';
freshStyle(restyled);
});
通过更新链接的样式表值,即使是相同的值,你也可以强制客户端重新查看;当它这样做时,它会看到并(重新)加载最新文件。
如果你遇到缓存问题,可以尝试像这样在文件名后附加一个随机(伪)版本号:
var restyled = 'style.css?v='+Math.random(0,10000);
var restyled = 'style.css?v=' + new Date().getTime();
- bogdan.mustiata有更好的方法来实现:
我只需要在开发时反映CSS更改,而不必一直刷新页面。
一种方法是使用Grunt.js来监视文件更改,然后livereload页面。
工作流程如下:
这可以与其他Grunt功能链接,例如{sass|less|stylus} 预处理器编译,以创建以下工作流程:
其他前端自动化资源:
来自Google员工的视频: http://www.youtube.com/watch?v=bntNYzCrzvE
在GoogleChrome浏览器中非常简单。
按F12,在右下角点击齿轮图标,选择“禁用缓存”选项(当DevTools打开时)。
Grunt的替代品可以使用Prepros。
它也会在您的项目文件夹上使用文件监视器,但是会针对您的所有文件(js、css、php)并在每次更改时重新加载页面。 (+ 如果这是小的视觉更改,如css,它不会刷新页面,而会进行平滑的过渡。(适用于颜色、定位等))
与Grunt一样,它编译和压缩您的文件,并允许您在指定的URL上进行实时预览(不仅仅是本地主机)。 (还有很多其他功能)
使用特殊端口,它甚至可以同步事件,如单击、鼠标滚轮、输入等。