You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AngularJS打印时隐藏文本框,仅展示输入内容的解决方法

解决打印页面时隐藏文本框仅显示内容的问题

我来帮你搞定这个打印时文本框影响UI的问题,下面是两种实用的解决方案:

方法一:使用CSS打印媒体查询(推荐)

这种方法不需要修改JavaScript代码,直接通过CSS控制打印时的样式,让文本框隐藏,同时显示它的输入值。

在页面的<head>里添加这段CSS:

@media print {
    .printText {
        display: none;
    }
    .printText::before {
        content: attr(value);
        display: inline;
    }
}

这样当触发打印时,浏览器会自动应用这个样式,隐藏文本框元素,并用伪元素显示它的value属性值。

方法二:修改JavaScript中的打印内容

如果你需要在生成打印框架时直接替换掉文本框,可以修改PrintDiv函数,把获取到的contents里的input元素替换成对应的文本。

修改后的JavaScript代码如下:

function PrintDiv() {
    var contents = document.getElementById("dvContents").innerHTML;
    // 替换所有带printText类的input为它的value值
    contents = contents.replace(/<input[^>]+class="[^"]*printText[^"]*"[^>]+value="([^"]*)"[^>]*>/g, '$1');
    
    var frame1 = document.createElement('iframe');
    frame1.name = "frame1";
    frame1.style.position = "absolute";
    frame1.style.top = "-1000000px";
    document.body.appendChild(frame1);
    var frameDoc = frame1.contentWindow ? frame1.contentWindow : frame1.contentDocument.document ? frame1.contentDocument.document : frame1.contentDocument;
    frameDoc.document.open();
    frameDoc.document.write('<html><head><title>DIV Contents</title>');
    frameDoc.document.write('</head><body>');
    frameDoc.document.write(contents);
    frameDoc.document.write('</body></html>');
    frameDoc.document.close();
    setTimeout(function () {
        window.frames["frame1"].focus();
        window.frames["frame1"].print();
        document.body.removeChild(frame1);
    }, 500);
    return false;
}

这段代码用正则表达式匹配带有printText类的input元素,然后把整个input标签替换成它的value属性值,这样打印框架里就只会显示纯文本了。

两种方法都能解决你的问题,第一种更简洁易维护,第二种适合需要对打印内容做更多动态处理的场景,你可以根据自己的需求选择~

内容的提问来源于stack exchange,提问作者sathish kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:40:50