Javascript-在window.print()之前动态切换打印样式表
Javascript - toggle print stylesheet dynamically before window.print()
我想实现一个按钮,只打印页面的某个div,同时让用户打印整个页面。我正在为打印样式表使用以下代码,到目前为止效果良好:print<div id=打印区域>lt/div>只有
现在我要做的是包含一个单独的样式表,它只包含这里建议的打印配置:https://stackoverflow.com/a/18497062/5775547,并在我的按钮的onclick函数中切换包含我的@media打印的样式表:
function handlePrintRouteInstructionsClick() {
routeInstructions.show();
$('link[id="printCss"]').prop("href", "css/printRouteInstructions.css");
window.print();
$('link[id="printCss"]').prop("href", "");
}
css包含如下:
<link rel="stylesheet" type="text/css" href="" id="printCss" media="print"/>
现在,当我按下按钮时,它仍然会打印整个页面。有趣的是,当第二次按下按钮时,它的工作原理与预期一样,只打印指定的div。Ctrl+P触发的对话框仍然打印整个页面,这是应该的。你知道为什么第一次按下按钮就不能正常工作吗?
您是否尝试过在样式表更改和使用setTimeout()
启动打印函数之间引入延迟?可能只需要几百毫秒或更短的时间。这听起来有点像时间问题。我会试试这样的东西:
function handlePrintRouteInstructionsClick() {
routeInstructions.show();
$('link[id="printCss"]').prop("href", "css/printRouteInstructions.css");
setTimeout(window.print(), 200);
$('link[id="printCss"]').prop("href", "");
}
我设法找到了一个解决方案。我想问题是文件还没有加载,但已经调用了window.print()
。然后在第二次单击时,文件仍在缓存中,因此更改足够快。我通过使用$(document).ready
和它的success
属性来克服这个问题,如下所示:
function handlePrintRouteInstructionsClick() {
$.ajax({
url:"css/printRouteInstructions.css",
success:function(data){
var style = $("<style />", {
id : 'printCss',
type: 'text/css',
html: data
}).appendTo("head");
routeInstructions.show();
window.print();
style.remove();
}
});
}
因此,基本上我正在加载文件,等待加载,将其作为样式添加到标题中,打印,然后再次删除样式。可能既不好也不高效,但它似乎工作得很好。
我会将媒体查询与<link>
的禁用功能结合起来。
- 创建样式表指定用户单击按钮时的打印样式,默认情况下,它将被禁用:
<link id="print-css-special" disabled="disabled" ... />
- 一旦用户单击"打印某个区域",就可以启用样式表、打印,然后禁用样式表
代码
button.addEventListener(e => {
var printStyleSheet = document.getElementById('print-css-special');
printStyleSheet.removeAttribute('disabled');
window.print();
printStyleSheet.setAttribute('disabled', 'disabled')
});
相关文章:
- 使用javascript将动态表从一个html页面打印到另一个html页
- 设置选项对象关键点:值对以实现带第二个y轴的动态打印
- 通过 JavaScript 动态创建和打印 h1 标签
- 如何使用php动态打印html脚本
- 打印从 HTTP RFEquest 动态更新的页面范围
- 我是否可以动态更改带有数字的图像,然后将其打印为 PDF
- 动态打印表行
- 动态加载的图像在打印预览后消失
- 如何动态打印 JQuery 移动点击事件数据
- 使用客户端图形和动态分类渲染器不起作用的打印任务
- 使用 JQuery 打印动态文本框值
- Javascript-在window.print()之前动态切换打印样式表
- 如何动态打印加载到文本框中的页面
- jQuery-如何动态打印空表
- Javascript在script标记中动态打印
- 可以'当使用Rails动态打印时,无法访问html id标签
- 如何动态打印到另一个表与JQuery/Javascript
- 动态打印包含多行文本框的页面内容
- 如何使用javascript动态打印表格
- 如何动态打印从1到100 angularjs的数组