代码如下
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
function Preview( oper ) //参数为第几个打印块
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
bdhtml = window.document.body.innerHTML; //获取当前页的html代码
sprnstr = "<!--startprint"+oper+"-->"; //设置打印开始区域
eprnstr = "<!--endprint"+oper+"-->"; //设置打印结束区域
prnhtml = bdhtml.substring(bdhtml.indexOf(sprnstr)+18); //从开始代码向后取html
prnhtml = prnhtml.substring(0,prnhtml.indexOf(eprnstr)); //从结束代码向前取html
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
window.document.body.innerHTML = prnhtml; //设置当前画面的内容为要打印的内容, 从而不需打印的部分就没了
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//添加一个打印必备的js控件
var WebBrowser = '<OBJECT ID="WB" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>';
document.body.insertAdjacentHTML('beforeEnd', WebBrowser);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
document.body.all.WB.execwb( 7, 1 ); //打印预览
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
window.document.body.innerHTML = bdhtml; //将原来画面还原回去
}
打印按钮中的onclick事件自不用说, 在需要打印的部分开头加上<!--startprint1-->, 结尾加上<!--endprint1-->. (其中"1"为要打印的区块, 是跟按钮事件中的参数一致的)
缺欠就是每当点击打印的时候, 首先会看到画面的变化(变成只剩下要打印的部分), 感觉这样用户体验不是很好.
还有一种方法就是将不需要打印的地方都应用@media.print的一个dispaly: none的样式, 这样无形中加大了太多工作量了.
哪位要是有更好的解决方案麻烦留个言, 让小弟也学习学习. 不尽感激.